10 二叉樹 非遞迴遍歷

2022-09-19 15:06:12 字數 1148 閱讀 7411

二叉樹的非遞迴遍歷

#include#include#include"mystack.h"  //使用陣列形式的棧

//非遞迴遍歷可以使用下列規則

/*每個節點設定乙個標誌位,預設狀態為假

- 將根節點壓入棧中

- 進入迴圈:只要棧中元素個數大於0,進行迴圈操作

- 彈出棧頂元素

- 如果這個棧頂元素標誌為真,輸出這個元素並執行下一次迴圈

- 如果棧頂元素標誌為假,將節點的標誌設為真

- 將該節點的右子樹、左子樹、根壓入到棧中

- 執行下一次迴圈

*/#define false 0

#define true 1

struct mybinarytree;

//引數:根節點

void foreachprint(struct mybinarytree* b)

mystacktype* st = init_stack(); //初始化乙個棧

push_stack(st, b); //根節點入棧

while(size_stack(st) > 0)else

if(curnode->lchild != null)

push_stack(st, curnode);}}

}int main();

struct mybinarytree bt2 = ;

struct mybinarytree bt3 = ;

struct mybinarytree bt4 = ;

struct mybinarytree bt5 = ;

struct mybinarytree bt6 = ;

struct mybinarytree bt7 = ;

struct mybinarytree bt8 = ;

bt1.lchild = &bt2;

bt1.rchild = &bt6;

bt2.rchild = &bt3;

bt3.lchild = &bt4;

bt3.rchild = &bt5;

bt6.rchild = &bt7;

bt7.lchild = &bt8;

foreachprint(&bt1);

return 0;

}

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

二叉樹以及對二叉樹的三種遍歷 先根,中根,後根 的遞迴遍歷演算法實現,以及先根遍歷的非遞迴實現。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次函式呼叫,這將極大地增加程式執行時間。這時,應該採取非遞迴便利二叉...