10 二叉樹 鏈式儲存 遞迴遍歷

2022-02-02 11:47:35 字數 1413 閱讀 4436

終於進入非線性資料結構的第一站了!

先從簡單的開始回憶起來吧!

1、二叉樹的鏈式儲存

用乙個鍊錶來儲存一顆二叉樹,每乙個結點用鍊錶的乙個鏈結點來儲存。

通常地,乙個二叉鍊錶至少包含3個域:資料域data、左指標域lchild、右指標域rchild。

現實應用的過程中,可以按照自己的需求新增其他指標域。

1 typedef struct

bitnodebitnode,*bitree;

2、遍歷

二叉樹的遍歷的定義:

按某個搜尋路徑訪問樹中的每個結點,使得每個結點均被訪問一次且僅被訪問一次。

遞迴式訪問二叉樹:

(1)、基本的三種:先序(中左右)、中序(左中右)、後序(左右中)。

(2)、三種遍歷演算法的遞迴遍歷左子樹、右子樹的順序都是固定的。只是訪問根節點的順序不同。

(3)、遞迴遍歷中遞迴工作棧恰好為樹的深度,在最壞的情況下,二叉樹是有n個結點而且深度為n的單支樹,此時遍歷演算法的空間複雜度為o(n)。

【注】這三種遍歷方式的演算法描述簡單易懂,應能作為模板記憶。

3、具體**實現

1 #include2 #include3 #include4

using

namespace

std;

5#define true 1

6#define false 0

7#define ok 1

8#define error 0

9#define overflow -2

10 typedef int

status;

11 typedef int

elemtype;

1213

/*儲存結構描述

*/14 typedef struct

bitnodebitnode,*bitree;

18/*

建立樹*/

19void inittree(bitree &t)

2027

else 33}

3435

void

visit(bitree t)

3639

/*遞迴方式訪問樹

*/40

/*先序遍歷

*/41

void

preorder(bitree t)

4248}49

void

inorder(bitree t)

5057}58

void

postorder(bitree t)

5966}67

intmain()

68

4、實現截圖

二叉樹 鏈式儲存的遍歷

include include include define status void define teletype char define null 0 typedef struct bitnode bitnode,bitree bitree jj bitree bin jj 構造二叉樹鍊錶表示的...

10 二叉樹 非遞迴遍歷

二叉樹的非遞迴遍歷 include include include mystack.h 使用陣列形式的棧 非遞迴遍歷可以使用下列規則 每個節點設定乙個標誌位,預設狀態為假 將根節點壓入棧中 進入迴圈 只要棧中元素個數大於0,進行迴圈操作 彈出棧頂元素 如果這個棧頂元素標誌為真,輸出這個元素並執行下一...

二叉樹 鏈式儲存 遞迴實現層次遍歷實現思路

層次遍歷 自上而下,從左往右訪問結點 除了根節點首先需要訪問外,其他結點遍歷都遵循先訪問左孩子結點,後訪問右孩子結點,所以只需要傳入父節點,就可以訪問左右孩子結點了,符合遞迴的思想。typedef struct bitnode bitnode,bitree 遞迴實現層次遍歷 實現思路 根節點只訪問一...