二叉樹遍歷遞迴和非遞迴實現

2021-09-29 20:25:02 字數 3249 閱讀 7064

遍歷一共有三種,前序中序後序,下面直接上**吧,外加執行結果:

#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...