二叉樹的前序中序遞迴,非遞迴遍歷

2021-06-08 04:58:36 字數 2027 閱讀 4928

二叉樹的前序,中序 ,遞迴,非遞迴遍歷

例如 二叉樹

6     14

4   8  12   16

前序遍歷的結果為 10  6  4  8  14  12 16

思路:   非遞迴方法  先壓入根節點10 ,同時輸出資料 10 。然後判斷 10有左子樹沒有,如果有則繼續壓入6 ,輸出 6 。判斷6有沒有左子樹,如果有壓入 4,輸出 4.

判斷4有沒有左子樹,4沒有左子樹了,這時應該判斷4有沒有右子樹,沒有則彈出4,判斷6有沒有右子樹,有那麼繼續壓入8 ,輸出 8 。判斷8沒有左子樹,判斷8沒有右子樹,這時彈出8,就到了10 了。 判斷10有右子樹,則壓入14,輸出 14 ,這樣依次類推可把所有節點都輸入進去。

結果為 10 6 4 8 14 12 16

中序遍歷 結果為    4 6 8 10  12  14  16

思路: 非遞迴方法 先壓入根節點10 ,判斷10有左子樹,壓入6 ,判斷6有左子樹 壓入4,判斷4沒有左子樹, 然後 輸出資料 4 ,然後判斷 4是否有右子樹,沒有則彈出資料 4 ,判斷 6是否有右子樹,有8則壓入,判斷8沒有左子樹,輸出 資料8 ,判斷8沒有右子樹,彈出8 ,判斷 10 有沒有 右子樹,有14 壓入棧,14有左子樹12壓入棧,12沒有左子樹,輸出資料 12 ,12沒有右子樹,彈出12 ,判斷14有右子樹  輸出14 ,16壓入棧中,然後16沒有左子樹了,輸出16 ,

結果為 4 6 8 10 12 14 16

前序遞迴遍歷

void preorder(treenode * root)

if(root == null)

return ;

else

coutpreorder(root->left);

preorder(root->right);

前序遍歷非遞迴遍歷

使用到了棧,這裡的棧是用的鏈式棧。

void preorder(treenode *root)

stacks;

if(root == null)

return ;

//  s.push(root) ; //壓入跟節點

treenode *p;

p = root;

while( p || !s.empty())  //如果節點p為空節點,或者棧為空 ,那麼表示結束

while( p )

s.push( p );

coutp = p->left;    //左子樹節點 壓入

s.pop();

p = p->right;

中序遍歷 遞迴方法

void  inorder(treenode *root)

if(root == null)

return ;

else

inorder(root->left);

coutinorder(root->right);

中序遍歷的 非遞迴方法:

void  inorder(treenode *root)

stacks;

treenode *p = root;

while( p || !s.empty())

while( p )

s.push(p);

p = p->left;

s.pop();

coutp=p->right;

勘誤:

前序遍歷的非遞迴遍歷演算法中:

void preorder(node *root)

node *p;

p = root;

while( p || !s.empty())  //如果節點p為空節點,或者棧為空 ,那麼表示結束

p = s.top()->right;

s.pop();}}

中序遍歷的非遞迴演算法:

void inorder(node *root)

node *p;

p = root;

while( p || !s.empty())  //如果節點p為空節點,或者棧為空 ,那麼表示結束

couts.pop();}}

二叉樹的遍歷 前序非遞迴和中序非遞迴

詳情可以見文章二叉樹建立和遞迴遍歷 建立如圖的二叉樹 就可以建立好上圖的二叉樹 非遞迴遍歷的演算法如下 include include using namespace std typedef char datatype 二叉樹的左右鏈表示,也叫做二叉鍊錶表示 typedef struct node ...

二叉樹的前序 中序 後序的遍歷 遞迴 非遞迴

前言 二叉樹的非遞迴遍歷需要用到棧的一些操作,所以貼出棧的相關操作的鏈結 定義資料結構 typedef char btdatatype typedef struct binarytreenode btnode 1.前序遍歷 遞迴 按照前序遍歷的規則,先訪問根節點,在遞迴遍歷左子樹,最後遞迴遍歷右字樹...

二叉樹的非遞迴前序中序後序遍歷

做個筆記,方便日後查閱 全部是模板函式,c 語言 template void preorder node root,ostream os if st.empty os endl template void midorder node root,ostream os if st.empty os en...