演算法與資料結構 二叉樹

2021-09-11 18:46:47 字數 2506 閱讀 7976

樹是一種特殊的資料型別,模擬具有樹狀結構數的集合

《【樹的特點】》:

每個節點都有零個或多個子節點;

沒有父節點的節點為根節點;

每乙個非根節點有且只有乙個父節點

除了根節點外,每個子節點可以分為多個不想交的子樹

樹的術語:

【節點的度】:某個節點所分出的下一級子節點的個數

【樹的度】:所有節點中,最大的節點的度即為數的度

【葉子節點/終端節點】:度為0的節點

【兄弟節點】:擁有相同的父節點的節點

【節點的層次】:從根節點開始算起,記為第一層,根節點的子節點為第二層,依次類推

【樹的高度或深度】:書中節點的最大層次

【堂兄弟節點】:節點的父節點在同一層的節點互稱堂兄弟節點

【節點的祖先】:從根節點到該節點的一條路徑上的所有直系節點

【《樹的種類》】:

無序樹(自由樹):節點之間沒有任何順序關係(自己指定的)

有序樹:節點之間有順序關係

有序樹又可分為【二叉樹】  【霍夫曼樹】  【b樹】

二叉樹:節點的度最高為2,即乙個節點的子節點最多兩個,分為完全二叉樹 滿二叉樹 平衡二叉樹 排序二叉樹

【完全二叉樹】:除了最高層外,其它層都應該達到最大的度

【滿二叉樹】:所有的層都要達到最大數量

【平衡二叉樹】:當且僅當節點的任意兩個子樹的深度差不大於1

【排序二叉樹】:見下圖類似

樹的儲存

存放的時候是一種鏈式儲存,

自根節點開始儲存,自上而下,一行一行的存,父節點中會存放子節點的位置,

節點類似於鍊錶,同時又存在差異,鍊錶只有乙個後繼鏈結,而樹每個節點有兩個及以上的鏈結

子樹通常稱為「左子樹」 和 「右子樹」

二叉樹的性質:

【】在第i層,最多有in-1個節點

【】深度為k的二叉樹,最多有 2k-1個節點

【】如果二叉樹的葉子節點數為n1,度數為2的節點數為n2,則n1=n2+1

【】具有n個節點的完全二叉樹的深度為log2(n+1)

廣度優先遍歷(層次遍歷):一層一層從左到右遍歷,

完全二叉樹用**實現的過程是乙個從前部取出元素進行操作(檢視是否有子樹,兩個子樹則向後,不滿則追加),而在最後的位置進行追加元素

**深度遍歷**的方式:先序遍歷(先根節點 左節點 右節點)  中序遍歷(先左子節點\根節點\右節點) 後序遍歷(做節點 右節點\根節點)

17:27分鐘

根據遍歷出的數字的順序,來畫出一棵樹

要求,給的順序中,必須包含中序的,在加上任意乙個另外的順序就可以畫出一棵樹。因為中序遍歷情況下,根節點能夠將左右節點分來成兩部分,

先序:0 1 3 7 8 4 9 2 5 6

中序:7 3 8 1 9 4 0 5 2 6

先序給出根節點是0,在中序中找到0的位置,可知,0左邊的是0的左子樹,而右邊的是右子樹,多次重複這樣的過程,即可確定一棵樹

後序:7 8 3 9 4 1 5 6 2 0

中序:7 3 8 1 9 4 0 5 2 6

後序給出的最後乙個數字0是整棵樹的根節點,同樣中序中的0左邊的數字是左子樹的數字,右邊是右子樹的數字

先序:0 1 3 7 8 4 9 2 5 6

後序:7 8 3 9 4 1 5 6 2 0

而如果沒有中序遍歷結果,此時無法樹分成左右兩部分,

演算法與資料結構 二叉樹

二叉樹 binary tree 二分樹 二元樹 二叉樹的遞迴定義 或是空樹,或是一棵由乙個根結點和左右子樹組成的樹,且左右子樹也是二叉樹。分枝結點 除葉結點以外的結點。二叉樹的性質 最多 2 h 1 個結點 n2 n0 1 滿二叉樹 所有分枝結點都存在左右子樹,且葉結點都在同一層。完全二叉樹 除最後...

資料結構與演算法 二叉樹

1.普通二叉樹 treenode package math public class treenode public void setdata int data public treenode getlchild public void setlchild treenode lchild publi...

資料結構與演算法 二叉樹

二叉樹是每個節點最多有兩個子樹的樹結構。通常子樹被稱作 左子樹 left subtree 和 右子樹 right subtree 性質1 在二叉樹的第i層上至多有2 i 1 個結點 i 0 性質2 深度為k的二叉樹至多有2 k 1個結點 k 0 性質3 對於任意一棵二叉樹,如果其葉結點數為n0,而度...