二叉樹的遍歷(遞迴與非遞迴 層次)

2021-09-22 08:07:05 字數 2055 閱讀 3252

遞迴遍歷

1.先序遍歷:根、左、右

void

preorder

(treenode* root)

}

2.中序遍歷:左、根、右

void

inorder

(treenode* root)

}

3.後序遍歷:左、右、根

void

endorder

(treenode* root)

}

非遞迴遍歷

1.先序遍歷:根、左、右

void

preorder

(treenode* root)

treenode* cur = s.

top();

s.pop();

pnode = cur->right;

}}

2.中序遍歷:左、根、右

void

inorder

(treenode* root)

//讀取值

treenode* cur = s.

top();

in_ans.

push_back

(cur->val)

; s.

pop();

//遍歷右

pnode = cur->right;

}}

3.後序遍歷:左、右、根

void

endorder

(treenode* root)

treenode* cur = s.

top();

//判斷如果最左節點的右子樹為空或為上乙個遍歷的節點,則讀取當前節點值,並將當前節點置為遍歷的上一節點

if(cur->right == nullptr || cur->right == prev)

//否則讀取右節點

else

}}

層序遍歷

按層進行遍歷

void

levelorder

(treenode* root)

}

測試**
#include

#include

#include

#include

using namespace std;

struct treenode };

vector<

int> pre_ans, in_ans, end_ans, level_ans;

void

preorder

(treenode* root)

}void

inorder

(treenode* root)

}void

endorder

(treenode* root)

}/*void preorder(treenode* root)

treenode* cur = s.top();

s.pop();

pnode = cur->right;

}}void inorder(treenode* root)

treenode* cur = s.top();

in_ans.push_back(cur->val);

s.pop();

pnode = cur->right;

}}void endorder(treenode* root)

treenode* cur = s.top();

if (cur->right == nullptr || cur->right == prev)

else

}}*/void

levelorder

(treenode* root)}/*

12 5

3 4 6 9

*/int

main()

二叉樹的遍歷(遞迴,非遞迴,層次)

二叉樹的非遞迴遍歷 二叉樹是一種非常重要的資料結構,很多其它資料結構都是基於二叉樹的基礎演變而來的。對於二叉樹,有前序 中序以及後序三種遍歷方法。因為樹的定義本身就 是遞迴定義,因此採用遞迴的方法去實現樹的三種遍歷不僅容易理解而且 很簡潔。而對於樹的遍歷若採用非遞迴的方法,就要採用棧去模擬實現。在三...

二叉樹各種遞迴非遞迴層次遍歷

typedef struct bitnode bitnode,bitree 注意這裡面的下方的bitnode代表 struct bitnode bitree代表 struct bitnode的指標 直接上程式 沒有什麼特別的難點,除了後序非遞迴遍歷需要些2個棧進行維護可能處理需要操作多一點,考研不容...

二叉樹的遞迴遍歷與非遞迴遍歷

二叉樹的遞迴遍歷與非遞迴遍歷 include include include 本程式實現二叉樹的建立,遞迴遍歷與非遞迴遍歷 typedef struct tnode tnode,pnode 構造二叉樹 pnode createtree else pnode data data pnode lchil...