#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...