二叉樹的非遞迴遍歷

2021-09-13 03:19:50 字數 2249 閱讀 1661

這裡的二叉樹不是一般的二叉樹,而是棵二叉查詢樹。

#include 

<

stdio.h

>

#include 

<

stdlib.h

>

#define

max_size 128

struct

node 

;struct

bin_search_tree 

;void

init_search_tree(

struct

bin_search_tree 

*tree);

void

clear_search_tree(

struct

bin_search_tree 

*tree);

void

insert_node(

struct

bin_search_tree 

*tree, 

intelement);

void

pre_order(

struct

node 

*p);

void

in_order(

struct

node 

*p);

void

post_order(

struct

node 

*p);

void

visit(

struct

node 

*p);

intmain()

;init_search_tree(

&tree);

for(i=0

; i<

sizeof

(arr)

/sizeof

(int

); i++)

//前序遍歷

pre_order(tree.root);

printf("\n

");//中序遍歷

in_order(tree.root);

printf("\n

");//後續遍歷

post_order(tree.root);

printf("\n

");clear_search_tree(

&tree);

getchar();

return0;

}/** 二叉樹的初始化

*/void

init_search_tree(

struct

bin_search_tree 

*tree)

/** 清除二叉樹,用二叉樹層次遍歷

*/void

clear_search_tree(

struct

bin_search_tree 

*tree)

}for(i=

0; i

<=

j; i++)

tree

->

root 

=null;}/*

* 二叉樹中插入節點element

*/void

insert_node(

struct

bin_search_tree 

*tree, 

intelement)

while

(p)}

else}p 

=child;}}

/** 前序遍歷,非遞迴

*/void

pre_order(

struct

node *p)

}/** 中序遍歷,非遞迴

*/void

in_order(

struct

node *p)

visit(p

=stack[top

--]);p =

p->

rchild;}}

/** 後序遍歷,非遞迴

*/void

post_order(

struct

node *p)

p =stack[top];    

//彈出棧頂

if(flag[top--]

==0&&p

->

rchild)

else}}

/** 訪問乙個節點

*/void

visit(

struct

node *p)

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

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