這裡的二叉樹不是一般的二叉樹,而是棵二叉查詢樹。
#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次函式呼叫,這將極大地增加程式執行時間。這時,應該採取非遞迴便利二叉...