目錄
二叉樹二叉樹的特點
特殊二叉樹 斜樹
滿二叉樹
完全二叉樹
完全二叉樹的性質
二叉樹測性質
定義:二叉樹(binary tree)是n(n>=0)個結點的有限集合,該集合或者為空集(稱空二叉樹),或者由乙個結點互不相交的,分別稱為根結點的左子樹和右子樹的二叉樹組成。
每個節點最多有兩個結點,也就是說可能有0,1,2個結點。
左子樹和右子樹是有區別的,就算沒有左子樹,右子樹也是在右邊。如下圖兩顆二叉樹事不一樣的樹。
所有結點之後左子樹或者右子樹的叫斜樹,往左邊斜的叫左斜樹,右邊斜的叫右斜樹。
滿二叉樹就是二叉樹所有的根結點左右子樹都滿了,並且所有的葉子結點都在同一層上。
完全二叉樹就是樹不要求滿,但是要求完全,也就是說,從根結點開始一層一層向下,從左到右,直到最後乙個葉子結點的結點不能有空缺。就「完全」了。如下圖兩棵樹就不是完全二叉樹。
判定方法就是從上至下一層一層從左到右按照滿二叉樹編號,如果編號的樹去對應目標樹的結點中間結點出現空缺。則不滿足完全二叉樹。如上圖樹1的10和樹2的6和7。
葉子節點只能出現在最下兩層。
最下一層的葉子結點一定是靠最左邊,
倒數第二層的葉子結點是在樹的最右部分。
如果二叉樹只有乙個孩子,那一定是左孩子。
同樣結點個數的二叉樹,完全二叉樹是深度最小。
1.在二叉樹的第i層至多有2^(i-1)個結點,i>=1。
由數學歸納法,第一層1個,第二層2個,第三層4個可知二叉樹的第i層至多有2i-1個結點。
2.深度為k的二叉樹總的最多有(2^k) - 1個結點。
深度為1有總的1個,深度為2有總的3個,深度為3有總的7個,深度為k的二叉樹總的最多有(2^k) - 1個結點。
3.重點,在二叉樹中,葉子結點的個數比度為2的所有根結點多乙個。
如圖,設圖結點數為n,設葉子結點為n0,度為1的結點為n1,度為2的結點數為n2。則n=n0+n1+n2。我們再看連線,度為2的連線有2*n2條,度為1的連線有n1條,總的連線就是n1+2*n2條。我們知道結點數減去1等於連線數,故有n-1=n1+2*n2條。上訴存在n=n0+n1+n2。所以得出n0 = n2 +1。
4.二叉樹性質4
5.二叉樹性質
程式設計練習之一顆二叉樹包含另一顆二叉樹
劍指offer上的一道程式設計練習,如何確定二叉樹a包含一棵相對小一點的二叉樹b?思路 用兩個函式實現,第乙個首先判斷根結點是否相等,第二個函式繼續判斷子結構是否相等 函式一 第一步,首先從根結點入手,判斷proota的值是否與prootb的根結點的值是否相等。若相等,則在比較a樹的子結構是否包含b...
判斷一顆二叉樹是否是平衡二叉樹
方法一,參考 template typename t intdepthtree bstreenode pbs template typename t bool isbalancetree bstreenode pbs intdepthleft depthtree pbs left intdepthr...
判斷一顆二叉樹是否為對稱二叉樹
本題源自劍指offer 可以自定以一種對稱前序遍歷,即先遍歷父節點,再訪問右子節點,在訪問左子節點,null節點也訪問,將得到的序列和前序遍歷比較,相同就說明二叉樹是對稱的。遞迴 bool issymmetrical treenode proot bool issymmetricalcore tre...