二叉樹是樹的一種,顧名思義可知其特點:
由二叉樹定義以及圖示分析得出二叉樹有以下特點:
1)每個結點最多有兩顆子樹,所以二叉樹中不存在度大於2的結點。
2)左子樹和右子樹是有順序的,次序不能任意顛倒。
3)即使樹中某結點只有一棵子樹,也要區分它是左子樹還是右子樹。
結點的層次:從根結點開始,假設根結點為第1層,根結點的子節點為第2層,依此類推,如果某乙個結點位於第l層,則其子節點位於第l+1層。
樹的深度:也稱為樹的高度,樹中所有結點的層次最大值稱為樹的深度。
葉子結點:一棵樹當中沒有子結點(即度為0)的結點稱為葉子結點,簡稱「葉子」,又稱為終端結點。
二叉樹的遍歷是計算機二級的考察重點,分為前序遍歷、中序遍歷、後序遍歷和層序遍歷。
前中後三種遍歷的關係,可以理解為依次遞進,在遍歷過程中,二叉樹的每個節點會被依次經過。這三種遍歷的區別在於節點經過不同的次數才能夠輸出。因此掌握的要點在於,從最基礎的開始理解,即前序遍歷。
下面進行遍歷的二叉樹都是上面所示的二叉樹。
前序遍歷從二叉樹的根結點出發,當第一次到達結點時就輸出結點資料,按照先向左在向右的方向訪問。
圖1
過程:
從根節點a出發,到達a一次,輸出a;
接下來先向左到達b,輸出b;
從b再向左走,先後到達dh,輸出dh;
輸出h後,回到d,第二次到達d不輸出,向右到達i,輸出i;
如此則d的葉子結點已經訪問完畢,返回b,向右到達e,輸出e;
然後向左到達j,輸出j;
b的所有子樹訪問完畢,返回a,向右走;
同理,依次輸出cfg。
最終輸出過程為:
輸出結果為
abdhiejcfg
中序遍歷是從二叉樹的根結點出發,當第二次到達結點時就輸出結點資料,按照先向左在向右的方向訪問。
過程:
從根結點a出發,第一次經過a,不輸出,向左走依次經過bdh,也不輸出;
到達h後,訪問h的左子樹,為空,則返回h,第二次經過h,輸出h;
返回d,第二次經過d,輸出d;
然後從d向右走,第一次經過i,訪問i的左子樹為空,返回i,第二次經過i,輸出i;
輸出i後,經由d返回b,第二次經過b,輸出b;
按照同樣的規則,依次輸出jeafcg。
最終輸出過程為:
輸出結果為
hdibjeafcg
後序遍歷就是從二叉樹的根結點出發,當第三次到達結點時就輸出結點資料,按照先向左在向右的方向訪問。
過程:
從根結點a出發,第一次經過a,不輸出,向左走依次經過bdh,也不輸出;
到達h後,訪問h的左子樹,為空,則返回h,第二次經過h,然後訪問h的右子樹,為空,返回h,第三次經過h,輸出h;
返回d,第二次經過d,向右走,第一次經過i,依次訪問i的左右子樹,返回i,第三次經過i,輸出i;
輸出i後,返回d,第三次經過d,輸出d;
按照同樣的規則,依次輸出jebfgca。
最終輸出過程為:
輸出結果為
hidjebfgca
層序遍歷是按照從上到下,從左到右的順序依次輸出所有結點,上圖中二叉樹的層序遍歷結果為:
abcdefghij
python之二叉樹
二叉樹是資料結構中的一種資料結構,在用python搭建決策樹模型時,發現需要先實現多叉樹.usr bin python coding utf 8 面對物件程式設計 思想 面對物件永遠不能包含物件 二叉樹 class btree root none class node data none left ...
二叉樹之 二叉樹深度
二叉樹深度 獲取最大深度 public static int getmaxdepth treenode root 二叉樹寬度 使用佇列,層次遍歷二叉樹。在上一層遍歷完成後,下一層的所有節點已經放到佇列中,此時佇列中的元素個數就是下一層的寬度。以此類推,依次遍歷下一層即可求出二叉樹的最大寬度 獲取最大...
演算法基礎之二叉樹
本文主要包括樹相關的演算法,二叉樹結點基本結構如下 function treenode x 本文還會繼續更新。function depth proot var depth 0 var currdepth 0 dfs proot return depth function dfs node currd...