遍歷一共有三種,前序中序後序,下面直接上**吧,外加執行結果:
#include
#include
#include
#include
#include
using
namespace std;
// 定義乙個樹節點
typedef
struct tag_tree_node tree_node,
*tree_node_p;
/* * 建立乙個二叉樹節點
*/tree_node_p create_tree_node
(int data =0)
/* * 刪除乙個二叉樹節點
*/void
delete_tree_node
(tree_node_p *val)
/* * 刪除乙個二叉樹節點
*/void
delete_tree_node_recursion
(tree_node_p *val)}/*
* 列印乙個二叉樹資料
*/void
print_tree_node
(tree_node_p val)
/* * 建立乙個用於測試的二叉樹
*/tree_node_p create_test_tree()
// 前序遍歷,遞迴
void
preorder_recursion
(tree_node_p val)
print_tree_node
(val)
;preorder_recursion
(val-
>left_node)
;preorder_recursion
(val-
>right_node);}
// 中序序遍歷,遞迴
void
infixorder_recursion
(tree_node_p val)
infixorder_recursion
(val-
>left_node)
;print_tree_node
(val)
;infixorder_recursion
(val-
>right_node);}
// 後序遍歷,遞迴
void
postorder_recursion
(tree_node_p val)
postorder_recursion
(val-
>left_node)
;postorder_recursion
(val-
>right_node)
;print_tree_node
(val);}
/// 下面採用非遞迴演算法,這個時候如果要使用非遞迴的話,我們要需要使用到棧
// 前序遍歷
void
preorder
(tree_node_p val)
stack storage_stack;
storage_stack.
push
(val)
;while
(!storage_stack.
empty()
)if(p->left_node !=
null)}
}// 中序序遍歷
void
infixorder
(tree_node_p val)
stack storage_stack;
tree_node_p tmp = val;
while
(!storage_stack.
empty()
|| tmp !=
null)if
(!storage_stack.
empty()
)}}// 後序遍歷
void
postorder
(tree_node_p val)
stack storage_stack1;
stack storage_stack2;
storage_stack1.
push
(val)
; tree_node_p tmp =
null
;while
(!storage_stack1.
empty()
)if(tmp-
>right_node !=
null
) storage_stack2.
push
(tmp);}
while
(!storage_stack2.
empty()
)}intmain()
結果:
--
----
----
----
----
----
------1
24816
1791819510
2021
1122233
6122425
1326277
1428
2915
303112
481617918
1951020
2111
222336
1224
2513
2627714
2829
1530
3116817
418919
2201021522
1123124
1225626
1327328
1429730
1531168
174189
1922010215
2211231
2412256
2613273
2814297
3015
3116178
181994
2021
1022
231152
2425
1226
2713628
2914
3031157
311617818
199420
2110
2223115
2242512
2627136
2829
1430
311573
1
二叉樹遍歷 遞迴 非遞迴實現
先序遍歷中序遍歷 後序遍歷 根結點 左子樹 右子樹 左子樹 根子樹 右子樹 左子樹 右子樹 根結點 先序遍歷 void preorder btree t 中序遍歷 void inorder btree t 後序遍歷 void postorder btree t 遞迴 recursion 就是子程式 ...
二叉樹遞迴遍歷和非遞迴遍歷
用遞迴和非遞迴實現二叉樹的前序遍歷 中序遍歷和後序遍歷並列印出相應結果。private class treenode 在遞迴呼叫時候系統自動給我們建立棧來儲存資料,而使用非遞迴時候需要我們自己實現棧來儲存資料。遞迴實現前序遍歷public void preorder treenode root sy...
二叉樹遍歷(遞迴和非遞迴)
二叉樹的中序遍歷 二叉樹的後序遍歷 測試二叉樹的節點定義如下 節點 二叉樹的前序遍歷順序為 根左右。如下圖所示,前序遍歷順序為 1245367。遞迴 public static void preorder treenode root system.out.print root.val preorde...