1) 在二叉樹中,第i層的結點總數不超過2^(i-1);
2) 深度為h的二叉樹最多有2^h-1個結點(h>=1),最少有h個結點;
3) 對於任意一棵二叉樹,如果其葉結點數為n0,而度數為2的結點總數為n2,則n0=n2+1;
4) 具有n個結點的完全二叉樹的深度為int(log2n)+1
5)給定n個節點,能構成h(n)種不同的二叉樹。h(n)為卡特蘭數的第n項。h(n)=c(n,2*n)/(n+1)。
若設二叉樹的高度為h,除第 h 層外,其它各層 (1~h-1) 的結點數都達到最大個數,第 h 層有葉子結點,並且葉子結點都是從左到右依次排布。
除了葉結點外每乙個結點都有左右子結點且葉子結點都處在最底層的二叉樹。
儲存的方式和圖一樣,有鍊錶和陣列兩種,用陣列存訪問速度快,但插入、刪除節點操作就比較費時了。實際中更多的是用鏈來表示二叉樹的。
分為前序遍歷,中序遍歷和後序遍歷,和按層次遍歷。前三種方法可用遞迴實現,比較簡單,不用遞迴的可以自己模擬棧操作來實現非遞迴的遍歷方法。按層遍歷也比較簡單,就是自己實現乙個佇列就可以了,也可以用陣列來模擬。需要注意的是後序遍歷的非遞迴演算法,需要乙個標識來標識某個節點的狀態,具體的就是當乙個節點左孩子被遍歷的時候為乙個狀態,當左右兩個節點都被遍歷的時候又是乙個狀態,只有乙個節點的左右孩子幾點都被遍歷,才可以輸出這個節點的值,這個和後序遍歷的定義差不多。
下面用乙個例子介紹
接下來看是如何遍歷的。
前序遍歷
遍歷的結果是:1、2、4、5、7、8、3、6。從根結點分兩部分,先把左邊的遍歷完,都是從左到右的。
中序遍歷
結果是:4,2,7,8,5,1,3,6。
後序遍歷
結果是:4、8、7、5、2、6、3、1
層次遍歷
結果是:1、2、3、4、5、6、7、8
這個其實也不難分三步:連線、抹線、旋轉三步就可以了。
1)連線:每一層兄弟結點連在一起。
2)抹線:對每個結點,除了其最左端的子女結點外,抹去與其餘子女結點的分支連線。
3)以每個結點的做左端的子女結點為軸,順時針轉45度。
1)樹中結點的最大度數沒有限制,而二叉樹結點的最大度數為2;
2)樹的結點無左、右之分,而二叉樹的結點有左、右之分。
3)樹是一種簡單的非線性結構,所有元素之間具有明顯的層次特性。
4)在樹結構中,每乙個結點只有乙個前件,稱為父結點,沒有前件的結點只有乙個,稱為樹的根結點,簡稱樹的根。每乙個結點可以有多個後件,稱為該結點的子結點。沒有後件的結點稱為葉子結點。
5)二叉樹的特點:非空二叉樹只有乙個根結點,每乙個結點最多有兩棵子樹,且分別稱為該結點的左子樹與右子樹。
小結:通過比較讓學習更加深刻
資料結構 樹與二叉樹
一 性質 1 在二叉樹中,第i層的結點總數不超過2 i 1 2 深度為h的二叉樹最多有2 h 1個結點 h 1 最少有h個結點 3 對於任意一棵二叉樹,如果其葉結點數為n0,而度數為2的結點總數為n2,則n0 n2 1 4 具有n個結點的完全二叉樹的深度為int log2n 1 5 給定n個節點,能...
資料結構 樹與二叉樹
1 樹的定義 樹是一種 非線性的資料結構。樹是n n 0 個結點的有限集,在任意一棵非空樹中 1 有且僅有乙個特定的被稱為 根 root 的結點 2 當n 1時,其餘結點可分為m m 0 個互不相交的有限集,其中每個集合本身又是一棵樹,並且稱為根的 子樹 subtree 3 每棵子樹也是由唯一的根結...
資料結構 樹與二叉樹
樹是一類重要的非線性資料結構,是以分支關係定義的層次結構 定義 樹 tree 是n n 0 個結點的有限集t,其中 有且僅有乙個特定的結點,稱為樹的根 root 當n 1時,其餘結點可分為m m 0 個互不相交的有限集t1,t2,tm,其中每乙個集合本身又是一棵樹,稱為根的子樹 subtree 特點...