二叉樹:樹中的每乙個節點,子節點的個數最多只有兩個。
度為2的普通樹和二叉樹沒有什麼區別,如果這兩棵樹的某一棵樹只有乙個子節點,在普通樹中沒有沒有左右之分,但是在二叉樹中有左右之分。
二叉樹存在的五種情況:
1.空樹
2.只有乙個根節點的二叉樹。
3.只有一顆左子樹的二叉樹。
4.只有一顆右子樹的二叉樹。
5.有左右子樹的二叉樹。
二叉樹的重要特性:
1.二叉樹中的第i層上的節點數最多為2的i次方個節點。
2.二叉樹中如果高度為k,這個二叉樹中的節點最多為2的(k+1)次方-1個
3.任何一棵二叉樹中,如果度為二的節點數為n,度為0的節點數為m,則m=n+1
滿二叉樹:(滿二叉樹是二叉樹的一種特殊形式----其節點要麼是葉子節點要麼它有兩個子節點)
1.二叉樹中的第i層上的節點數最多為2的i次方個節點。
2.2.二叉樹中如果高度為k,這個二叉樹中的節點最多為2的(k+1)次方-1個
3.在滿二叉樹中不存在度為一的節點,每乙個分支節點都有兩棵高度一致的子樹,所有的葉子節點都在最下面的一層。
完全二叉樹:(完全二叉樹而是樹的一種特殊形式,當然它沒有滿二叉樹那麼**,話說滿二叉樹太浪費記憶體了)
1.從一棵滿二叉樹的最下一層,從右往左依次刪除若干(0-n)節點後形成的樹叫完全二叉樹。
2.在一棵完全二叉樹中,如果有乙個節點沒有左子樹,那麼這個節點必須沒有右子樹,這個節點叫葉節點。
完全二叉樹中的下標規律(根節點下標預設為0)
1、樹中的任意乙個節點的下標為i,那麼這個節點的父節點下標為(i - 1)>> 1;(根節點除外)
2、樹中的任意乙個節點的下標為i,那麼這個節點的左子樹下標為:2 * i + 1;右子樹的下標為:2 * i + 2;
3、除開根節點,左子樹的下標為奇數,右子樹的下標為偶數
二叉樹遍歷的三種情況:
1.先序遍歷:先訪問根節點,而後以同樣的方式順序遍歷左子樹和右子樹。
結果:a -> b -> d -> h -> e -> i -> c -> f -> j -> k ->g
2.後序遍歷:先以同樣的方式遍歷左右子樹,最後遍歷根節點。
結果:h -> d -> i -> e -> b -> j -> k -> f -> g -> c -> a
3.中序遍歷:先以同樣的方式遍歷左子樹,然後訪問根節點,最後以同樣的方式遍歷右子樹。
結果: d -> h ->b -> e -> i -> a -> j -> f -> k -> c -> g
#pragma once
templateclass cmytree_arr
;templatevoid cmytree_arr::_printftree(int index)
}templatevoid cmytree_arr::printftree()
templatevoid cmytree_arr::inittree(t arr, size_t length)
} pbuff[len++] = date;
}templateint cmytree_arr::_find(t const& findval) const
return -1;
}templatebool cmytree_arr::find(t const& findval) const
templatevoid cmytree_arr::clear()
templatecmytree_arr::~cmytree_arr()
templatecmytree_arr::cmytree_arr()
二叉樹,完全二叉樹,滿二叉樹
二叉樹 是n n 0 個結點的有限集合,它或者是空樹 n 0 或者是由乙個根結點及兩顆互不相交的 分別稱為左子樹和右子樹的二叉樹所組成。滿二叉樹 一顆深度為k且有2 k 1個結點的二叉樹稱為滿二叉樹。說明 除葉子結點外的所有結點均有兩個子結點。所有葉子結點必須在同一層上。完全二叉樹 若設二叉樹的深度...
二叉樹和完全二叉樹
二叉樹規律 假設根節點的高度為0 二叉樹是每個節點至多只有兩個節點的樹 深度為i所在的層至多有 2 i個節點 高度為k的二叉樹至多有2 k 1 1個節點 n0表示度為0的節點,n2表示度為2的節點,存在n0 n2 1 對所有樹有 節點個數 邊數 1 完全二叉樹規律 節點數為n的完全二叉樹,其高度為 ...
完全二叉樹
最近在看資料結構和演算法,這好多天沒碰幾乎全忘,搞乙個看到乙個完全二叉樹都算了半天,網上眾說紛紜啊,我還是以我的理解記錄一下給我做個記憶吧,以我這記憶力指不定以後又忘了。首先幾個概念 理想二叉樹,滿二叉樹,完全二叉樹。1 滿二叉樹 所有節點 除葉子 都有2個子節點,葉子節點都在一層,就是滿了的意思。...