二叉樹的遍歷總結

2021-10-10 15:06:15 字數 3455 閱讀 1466

用二叉鍊錶來儲存二叉樹

typedef

struct bitnode //二叉樹

bitnode,

*bitree;

輸入乙個陣列,以層次遍歷的順序進行建樹,規定陣列元素都大於0。當陣列元素為-1時,表示該結點為空

舉個例子,比如陣列大小為 12,陣列元素為

356

8-12

78134

-165

則建立的二叉樹為

建立二叉樹的**:

queue q;

//輔助佇列

void

createbitree()

//建立二叉樹

int counts =1;

for(

int i =

1; i <= n; i++

)else

//空結點標記

}while

(!q.

empty()

)//清除佇列中的空結點

}

訪問結點

void

visit

(bitree t)

層次遍歷

void

levelorder

(bitree t)

q.push

(t);

//根結點入隊

while

(!q.

empty()

)}

先序遍歷,也叫前序遍歷

void

preorder

(bitree t)

}

中序遍歷

void

inorder

(bitree t)

}

後序遍歷

void

postorder

(bitree t)

}

中序遍歷

沿著根的左孩子,依次入棧,直到左孩子為空

棧頂元素出棧並訪問,若其右孩子為空,繼續執行 2

若其右孩子不空,將右子樹轉向執行 1

void

inorder2

(bitree t)

else

//出棧,轉向出棧結點的右子樹

}}

先序遍歷和中序遍歷很相似,區別在於掃瞄結點時先訪問結點,再將其入棧

void

preorder2

(bitree t)

else

}}

後序遍歷

初始時依次掃瞄根結點的所有左側結點並將它們全部依次進棧

讀棧頂元素,若其右孩子不為空且未被訪問過,將右子樹轉向 1

否則,棧頂元素出棧並訪問

注意:在第二步中,需要分清返回時是從左子樹返回的還是右子樹返回的,設定乙個輔助指標 r,指向最近訪問過的結點

每次出棧訪問完乙個結點就相當於遍歷完以該結點為根的子樹,需要將 p 置空

void

postorder2

(bitree t)

else

else

//否則,彈出棧頂元素並訪問}}

}

#include

#include

#include

#include

using namespace std;

typedef

struct bitnode //二叉樹

bitnode,

*bitree;

queue q;

//輔助佇列

void

createbitree()

;//層次序列建立二叉樹

void

visit

(bitree r)

;//訪問結點

void

levelorder

(bitree r)

;//層次遍歷

/* 遞迴的先序、中序、後序遍歷 */

void

preorder

(bitree r)

;void

inorder

(bitree r)

;void

postorder

(bitree r)

;/* 非遞迴的先序、中序、後序遍歷 */

void

preorder2

(bitree r)

;void

inorder2

(bitree r)

;void

postorder2

(bitree r)

;int

main()

void

createbitree()

//建立二叉樹

for(

int i =

1; i <= n; i++

)else

//空結點標記

}while

(!q.

empty()

)//清除佇列中的空結點

}void

visit

(bitree t)

void

levelorder

(bitree t)

q.push

(t);

//根結點入隊

while

(!q.

empty()

)}void

preorder

(bitree t)

}void

inorder

(bitree t)

}void

postorder

(bitree t)

}void

preorder2

(bitree t)

else}}

void

inorder2

(bitree t)

else

//出棧,轉向出棧結點的右子樹}}

void

postorder2

(bitree t)

else

else

//否則,彈出棧頂元素並訪問}}

}

程式執行結果如下:

二叉樹的遍歷總結

2 中序遍歷 3 後序遍歷 4 層次遍歷 給定乙個二叉樹,返回它的前序 遍歷。示例 輸入 1,null,2,3 輸出 1,2,3 definition for a binary tree node.public class treenode class solution private void h...

二叉樹的遍歷總結

遍歷方式 根結點 左孩子 右孩子 definition for a binary tree node.struct treenode class solution 遍歷方式 處理過程 definition for a binary tree node.struct treenode class so...

二叉樹遍歷 推導總結

第一次總結,個人淺見,望大牛們輕削,怕疼,呵呵 1.已知前序遍歷和中序遍歷序列,可以唯一確定一棵二叉樹。2.已知後序遍歷和中序遍歷序列,可以唯一確定一棵二叉樹。3.已知後續遍歷和前序遍歷序列,不能唯一確定一棵二叉樹。綜上 要想唯一確定乙個二叉樹,必須要有中序遍歷序列。遍歷規則 1 先序或者前序遍歷規...