二叉樹的先序 中序 後序 分層遍歷

2021-09-12 17:19:57 字數 1441 閱讀 2557

先序遍歷(dlr)二叉樹的操作為:

若二叉樹為空,則空操作;否則:

(1)訪問根節點

(2)先序遍歷左子樹

(3)先序遍歷右子樹

中序遍歷(ldr)二叉樹的操作為:

若二叉樹為空,則空操作;否則:

(1)中序遍歷左子樹

(2)訪問根節點

(3)中序遍歷右子樹

後序遍歷(lrd)二叉樹的操作為:

若二叉樹為空,則空操作;否則:

(1)後序遍歷左子樹

(2)後序遍歷右子樹

(3)訪問根節點

分層遍歷二叉樹的操作為:

若二叉樹為空,則空操作;否則按層訪問每乙個節點

假設乙個二叉樹如下圖所示:

先序遍歷:1 2 4 3

中序遍歷:2 4 1 3

後序遍歷:4 2 3 1

分層:1 2 3 4

c++**實現如下:

節點結構定義如下:

struct node;
先序遍歷的演算法實現為:

遞迴演算法:

void dlr(struct node *root)

}

非遞迴演算法:

void dlr_1(struct node *root)

if(!s.empty())}}

中序遍歷的演算法實現為:

遞迴演算法:

void ldr(struct node *root)

}

非遞迴演算法:

void ldr_1(struct node *root)

if(!s.empty())}}

後序遍歷的演算法實現為:

遞迴演算法:

void lrd(struct node *root)

}

非遞迴演算法:

void lrd_1(struct node *root)

else

if(cur->left!=null)}}

}

分層遍歷演算法實現如下:

void printfromtoptobottom(node* root)

queueq;

q.push(root);

while(!q.empty())

if(temp->right != null)}}

二叉樹先序 中序 後序遍歷

題目 用遞迴和非遞迴方式,分別按照二叉樹先序 中序和後序列印所有的節點。我們約定 先序遍歷順序為根 左 右 中序遍歷順序為左 根 右 後序遍歷順序為左 右 根。遞迴實現 遞迴遍歷二叉樹 先序 public void preorderrecur node head system.out.println...

二叉樹先序遍歷 中序遍歷 後序遍歷

輸入二叉樹的先序遍歷序列和中序遍歷序列,輸出該二叉樹的後序遍歷序列。非建二叉樹版本 include includeusing namespace std string preord,inord void rebuild int preleft,int preright,int inleft,int ...

二叉樹先序遍歷 後序遍歷 中序遍歷

從根部 a 開始,然後開始遍歷左子樹,直接找到 b 檢視 b 有沒有左子樹,有 d,再檢視 d 有沒有子樹,沒有,d 已經是葉子,所以第二個是 d。倒回去,取中 b,第三個數是 b。檢視 b 有沒有右子樹,有 e 檢視 e 有沒有子樹,有 g 左 h 右 所有後面三個數是 egh 先查左子樹,存在繼...