樹
? ? 葉子結點:指的是度為0的結點(5,6,7,3,9,8為葉子結點);
? ? 分支結點:除了葉子結點,其他的結點(包括根結點)稱之為分支結點(1,2,4,8);
? ? ? ? 葉子結點和分支結點的關系:互補關系;
? ? ? ? 葉子結點+分支結點 = 總結點;
? ? 內部結點:在分支結點基礎上,除去根節點,其余的就是內部結點(2,4,8);
? ? 結點的度:結點的下一層有多少個相關聯的結點就有多少個度;
? ? ? ? ? ? 1的度為3,2的度為3,4的度為1,8的度為2,3的度為0;
? ? 樹的度:所有結點的度當中,度數最高的一個(3);
? ? (父結點,子結點,兄弟結點):是相對的量
? ? ps=>
? ? ? ? 5結點相對2結點:它是子結點
? ? ? ? 2結點相對5結點:他是父結點
? ? ? ? 5結點相對6,7結點:它是兄弟結點
? ? 也就是說。2為5,6,7的父結點。 5,6,7為2的子結點。5,6,7互為兄弟結點
? ? 層次:這里有4層
? ? 唯一沒有計算入度的就是根結點;
? ? 假設一棵樹的總結點數為n,總度數為k,那么 n = k+1;
? ? ? ? 練習01:
1.先求總結點數: n = 3*2+2*1+1 = 9;
最后得出結果C正確;
? ? 樹的遍歷
? ? ? ? 前序遍歷:先訪問根,再一次訪問子結點;
? ? ? ? ? ? 1-2-5-6-7-3-4-8-9-10
? ? ? ? 后序遍歷:先訪問子結點,再訪問根點
? ? ? ? ? ? 5-6-7-2-3-9-10-8-4-1
? ? ? ? 層序遍歷:從層次遍歷
? ? ? ? ? ? 1-2-3-4-5-6-7-8-9-10
二叉樹不是樹的一種特殊情形,盡管其與樹有許多相似之處,但樹和二叉樹有兩個主要差別:
1. 樹中結點的最大度數沒有限制,而二叉樹結點的最大度數為2;
2. 樹的結點無左、右之分,而二叉樹的結點有左、右之分。
二叉樹并不是特殊的樹,而是一種獨立的數據結構
? ? 滿二叉樹:二叉樹上的所有結點都是充實的,飽滿的,沒有缺結點(完整的金字塔型);
? ? 完全二叉樹:把最后一層和前面若干層劃分開,假如一顆完全二叉樹有n層,前面的n-1層為滿樹,最后一層結點排列必須
? ? 要有規律,從左到右排列
? ? 非完全二叉樹:缺少結點,且排列無順序
? ? 二叉樹重要特征:
? ? ? ? 1.在二叉樹的第i層上最多有2^(i-1)個結點(i>=1);
? ? ? ? 2.深度為k的二叉樹最多有(2^k)-1個結點(k>=1);
? ? ? ? 3.對任何一棵二叉樹,如果其葉子結點數為n0,度為2的結點數為n2.則n0 = n2+1;
? ? ? ? ? ? 總結點數(n) = 總度數(k)+1? 同樣適用于二叉樹;
? ? ? ? 推導:
? ? ? ? =>? 設一棵二叉樹,它的葉子結點數n0個,度2的結點數n2,度1的結點數n1;
? ? ? ? 那么:? n1+n2+n0 = 所有結點的總數 = k+1;
? ? ? ? 然后:? k = n1*1+n2*2+n0*0;
? ? ? ? 可得:? n1+n2+n0 = n1+n2*2+1 => n0 = n2+1;
二叉樹特性:
? ? 如果對一棵有n個結點的完全二叉樹的結點按是層序編號(從第一層到 math.floor( log2^n )+1 層,每層從左到右 ),
? ? 則對任一結點i ( 1<=i<=n ),有
? ? ? ? 如果i=1,則結點i無父結點,是二叉樹的根,如果i>1,則父結點是 math.floor( i/2 );
? ? ? ? 如果2i>n,則結點i為葉子結點,無左子結點。否則,其左子結點是結點2i;
? ? ? ? 如果2i+1>n,則結點i無右子結點,否則,其右子結點是結點2i+1;
練習02
利用公式進行換算,并且要知道完全二叉樹度數為1的結點個數要么沒有(0),要么只有一個(1);
n1+n2+n0 = 總結點數;
因為:n0 = n2+1; ==> n2 = n0-1;
所以所得? ? n1 + 2n0 = 768
最后答案為B;
二叉樹的遍歷:
? ? 前序遍歷:先訪問根,再一次訪問子結點;
? ? ? ? 1-2-4-5-7-8-3-6
? ? 中序遍歷:先訪問左結點,再訪問根結點,再訪問右結點;
? ? ? ? 4-2-7-8-5-1-3-6
? ? 后序遍歷:先訪問左結點,再訪問右結點,再訪問根結點;
? ? ? ? 4-8-7-5-6-2-3-1
? ? 層序遍歷:從層次遍歷;
? ? ? ? 1-2-3-4-5-6-7-8
練習03
答案:C
樹與二叉樹的轉換:
? ? 1.先把一棵樹的全部左子結點留下,右子結點線劃掉;
? ? 2.把兄弟結點連接起來,不同父結點的兄弟結點不需要連;
轉換后的二叉樹和之前的樹比較:
? ? 前序遍歷兩者相同
? ? 前序遍歷:1-2-3-5-6-7-4-8-9
? ? 二叉樹的中序遍歷 = 樹的后序遍歷
? ? 二叉樹的中序遍歷:2-5-6-7-3-8-9-4-1
? ? 樹的后序遍歷:2-5-6-7-3-8-9-4-1