樹的非遞迴遍歷

2021-09-16 19:57:31 字數 1040 閱讀 7284

#include

using namespace std;

/* 1

2 3

4 5 6

7 8

*/void

pre_order

(treenode*root)

cout

(root->left)

;pre_order

(root->right);}

void

in_order

(treenode*root)

in_order

(root->left)

; cout

(root->right);}

void

post_order

(treenode*root)

post_order

(root->left)

;post_order

(root->right)

; cout

pre_order

(treenode*root)if(

!s.empty()

)}}void

in_order

(treenode*root)if(

!s.empty()

)}}/*

兩個棧s1,s2,s1負責把棧頂結點cur出棧,s2.push(s2),並在其左右兒子結點存在的情況下入棧左右兒子;

迴圈執行,其實s2儲存的就是後序遍歷的序列(只不過是反向順序儲存),挨個出棧即可;

*/void

post_order

(treenode*root)

while

(!s2.

empty()

)}/**/

void

post_order2

(treenode*root)

else

}}

樹的遍歷遞迴非遞迴

1先序 遞迴 class solution public void b list list,treenode tree 非遞迴 class solution else return list 2中序 遞迴 class solution public void b list list,treenode...

樹的非遞迴遍歷

在vs2011版本中除錯通過。include stdafx.h include stack.h include 標準庫中定義的棧 includeusing namespace std define max len 15 void create tree treenode head,char pdat...

樹的非遞迴遍歷

1.中根遍歷 思路 一直遍歷左子樹 p p left 直到p為空。此時訪問棧頂元素,棧頂元素出棧。開始遍歷右子樹p p right 遍歷右子樹的左子樹 出棧時訪問 1.definition for a binary tree node.2.struct treenode 7.class soluti...