演算法與資料結構之二叉樹的遍歷

2021-10-10 12:52:29 字數 1365 閱讀 6561

二叉樹的遍歷方式

前序遍歷(preorder)

前序遍歷就是先訪問根節點,再訪問左子節點,最後訪問右子節點的遍歷方式

中序遍歷(inorder)

中序遍歷是先訪問左子節點,再訪問根節點,最後訪問右子節點的遍歷方式

後序遍歷(postorder)

後序遍歷是先訪問左子節點,再訪問右子節點,最後訪問根節點的遍歷方式

二叉樹的遍歷

二叉樹的遍歷可以通過遞迴來實現。遞迴終止的條件是當前節點為空節點,然後返回。前中後序遍歷的遞迴函式不同之處只是輸出當前節點的那條語句不同。

題目

假設二叉樹有n個節點,編號分別為0至n-1。

輸入資料第一行給出節點數,然後接下來的n行按以下個數給出節點資訊:

id left right

id為節點編號,left為左子結點編號,right為右子結點編號。當結點不存在時,編號為-1

題目在樣例輸入

9

0 1 4

1 2 3

2 -1 -1

3 -1 -1

4 5 8

5 6 7

6 -1 -1

7 -1 -1

8 -1 -1

樣例輸出

preorder

0 1 2 3 4 5 6 7 8

inorder

2 1 3 0 6 5 7 4 8

postorder

2 3 1 6 7 5 8 4 0

**實現

#includeusing namespace std;

#define max 25

#define nil -1

struct node

;node t[max];

int n,root;

void preorder(int id)

for(int i=0;i注意事項

二叉樹的遍歷會對每乙個節點進行訪問,因此時間複雜度為o(n)。使用遞迴實現遍歷演算法的時候要注意,一旦樹的結點數量龐大且分布不均勻,那麼就很可能導致遞迴深度過深,最終堆疊溢位,boom~

資料結構之二叉樹的遍歷

先序遍歷 void preorder node root 中序遍歷 void inorder node root 後續遍歷 void postorder node root 層次遍歷 void level node root if p rchild null 如果右子樹不空,則右子樹根節點入隊 下面...

資料結構與演算法之二叉樹

樹同時具有鍊錶和陣列的優點,關於樹的術語有 根 樹頂端的節點 葉子節點 沒有子節點的節點 樹那個節點所對應的資料結構 節點物件類,包含資料 public class node 將資料插到樹中 public void inser int id,double dd public boolean dele...

資料結構與演算法之二叉樹

陣列的優缺點 鍊錶的優缺點 缺點 在進行查詢時,效率仍然較低,需要從頭節點開始遍歷,時間複雜度為o n 樹的優點 能提高資料儲存和讀取的效率,比如利用二叉搜尋樹,既可以保證資料的查詢速度,同時也可以保證資料的插入,刪除,修改的速度。樹的常用術語 結合示意圖理解 樹的基本性質 二叉樹 每個節點最多只能...