二叉樹之非遞迴遍歷

2021-10-21 11:01:48 字數 1084 閱讀 8113

參考題目

首先要明白二叉樹的三種遍歷方式

乙個重要的思想:二叉樹中的每乙個節點都可以看作是一棵樹的根節點

對於非遞迴遍歷,需要借助迴圈和棧來實現

#include #include using namespace std;

template class binode

binode(t e):lchild(null),rchild(null),data(e){}

~binode()

friend class bitree;

};class bitree

~bitree()

void createtree();

void preorder();

void midorder();

void postorder();

};void bitree::createtree(binode*&t)

}void bitree::preorder(binode*t)

stack*> s;

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

if(!s.empty())

}}void bitree::midorder(binode*t)

stack*> s;

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

if(!s.empty())

}}void bitree::postorder(binode*t)

binode*visited = null;

stack*> s;

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

if(!s.empty())

else}}

}void bitree::createtree()

void bitree::preorder()

return 0;

}

測試樣例

input:

2abd##e##cf##g##

output:

abdecfg

dbeafcg

debfgca

二叉樹遍歷(遞迴 非遞迴)

二叉樹以及對二叉樹的三種遍歷 先根,中根,後根 的遞迴遍歷演算法實現,以及先根遍歷的非遞迴實現。node public class node public node left public node right public object value 遍歷訪問操作介面 public inte ce ...

二叉樹非遞迴遍歷

二叉樹非遞迴遍歷的幾個要點 1 不管前序 中序還是後序,它們的遍歷路線 或者說是回溯路線,先沿左邊一直走到盡頭,然後回溯到某節點,並跳轉到該節點的右孩子 如果有的話 然後又沿著這個有孩子的左邊一直走到盡頭 都是一樣的。2 明確每次回溯的目的。比如,前序回溯的目的是為了訪問右子樹 中序回溯的目的是為了...

非遞迴遍歷二叉樹

中序遞迴遍歷 void inordertrvdigui node pnode 然而,當樹的深度很大 比如16 時 假設為滿二叉樹 樹的節點數為 2 0 2 1 2 2 2 15 2 16 65536,遍歷整個二叉樹意味著有65536次函式呼叫,這將極大地增加程式執行時間。這時,應該採取非遞迴便利二叉...