問題描述:
中序遍歷結果為:1 2 3 4 5 6 7 8 9
演算法實現:
//非遞迴用棧實現中序遍歷
void binarytree::non_recurse_using_stack_in_order_visit(node* root)
if(top >-1)}}
該演算法實現步驟如下:
以下全部實現**來自
#include
#include
using namespace
std;
class
node
//node(int d);
node(int d, node* l, node* r);//建構函式的宣告
};class
binarytree;};
int main()
/*node::node(int d)
*/node::node(int d, node* l, node* r)
binarytree::binarytree(node* r)
//遞迴實現中序遍歷
void binarytree::recurse_in_order_visit(node* root)
}//非遞迴用棧實現中序遍歷
void binarytree::non_recurse_using_stack_in_order_visit(node* root)
if(top >-1)
}}//非遞迴且不用棧實現中序遍歷
void binarytree::non_recurse_non_stack_in_order_visit(node* root)
if ( !root->visited )
if ( root->right != null &&!root->right->visited )
else}}
執行結果:
遞迴中序遍歷的結果:
1 2 3 4 5 6 7 8 9
非遞迴用棧中序遍歷的結果:
top值 元素
2 1
1 2
0 3
0 4-15
0 6
0 7-18
-19非遞迴且不用棧中序遍歷的結果:
1 2 3 4 5 6 7 8 9
process returned 0 (0x0) execution time : 0.585 s
press any key to continue.
演算法導論12 1 3習題解答 非遞迴中序遍歷
clrs 12.1 3 演算法思想 1.採用棧的話,先尋找最左邊的節點,把經過的節點都存入棧中,第乙個被彈出來的為最左節點,那麼訪問其右子樹,對右子樹也像前面一樣遍歷,整個流程跟遞迴一樣。2.不採用棧的話,先是訪問最左節點,然後訪問其右子樹,然後回溯到最左節點的父節點,不斷重複這個過程,思路還是一樣...
非遞迴中序遍歷
非遞迴中序遍歷 中序遍歷的順序為 左 中 右,通過棧這個資料結構來記錄遍歷的歷史,思想如下 1.找到左子樹的底部葉子節點,列印葉子節點 期間將所有經過的節點壓棧,用於回退到父節點用 2.回退到葉子節點的父節點,列印父節點 在1走到左葉子節點的過程中,通過棧記錄下父節點 3.從父節點進入右兒子,再重複...
非遞迴中序遍歷二叉樹
非遞迴中序遍歷二叉樹 include define maxsize 100 typedef char datatype 二叉鍊錶型別定義 typedef struct binnode binnode,bintree 順序棧型別定義 typedef struct seqstk 初始化棧 int ini...