二叉樹操作總結

2022-07-31 01:30:17 字數 2777 閱讀 8171

對於二叉樹,有前序、中序、後序三種遍歷方法,由於樹的定義本身就是遞迴定義的,故採用遞迴方法實現三種遍歷簡潔易懂。若採用非遞迴訪問,則需要使用棧來模擬遞迴的實現。三種遍歷的非遞迴演算法中,前序和後序較容易,而後序相對較難。

前序遍歷

遞迴非遞迴

樹的遍歷

中序遍歷

遞迴非遞迴

後序遍歷

遞迴非遞迴

層次遍歷

計算樹高

計算結點數

1. 前序遍歷【訪問順序:根結點-左孩子-右孩子】

a> 前序遍歷遞迴實現

1

void preorderrecursively(binarytreenode *root)

2 9 }

b> 前序遍歷非遞迴實現

1

void preorder(binarytreenode *root)

2 20 }

2. 中序遍歷【訪問順序:左孩子-根結點-右孩子】

a> 中序遍歷遞迴實現

1

void inorderrecursively(binarytreenode *root)

2 9 }

b> 中序遍歷非遞迴實現

1

void inorder(binarytreenode *root)

2 22

23if(!s.empty())//

第二種情況

2430

}31 }

3. 後序遍歷【訪問順序:左孩子-右孩子-根結點】

a> 後序遍歷遞迴實現

1

void postorderrecursively(binarytreenode *root)

2 9 }

b>後序遍歷非遞迴實現

1

void postorder(binarytreenode *root)

2 31

else

3238

}39 }

4.層次遍歷

1

void levelorder(binarytreenode *root)

2 19 }

5.計算樹高和結點數

1

int treeheight(binarytreenode *root)//

計算樹高

2 12

13int countnode(binarytreenode *root)

14

【 完整**】

1 #include "

stdafx.h

"2 #include 3 #include 4 #include 5

using

namespace

std;67

struct

binarytreenode814

};15

16void createbinarytree(binarytreenode **root)//

二級指標作為函式引數

17 31}32

3334

void connecttreenodes(binarytreenode *proot,binarytreenode *pleft,binarytreenode *pright)

3543}44

45void preorderrecursively(binarytreenode *root)

46 53}54

55void preorder(binarytreenode *root)

56 74}75

76void inorderrecursively(binarytreenode *root)

77 84}85

86void inorder(binarytreenode *root)

87 107

108if(!s.empty())//

第二種情況

109115

}116

}117

118void postorderrecursively(binarytreenode *root)

119

126}

127128

void postorder(binarytreenode *root)

129

158else

159165

}166

}167

168void levelorder(binarytreenode *root)

169

186}

187188

int treeheight(binarytreenode *root)//

計算樹高

189

199200

int countnode(binarytreenode *root)

201

206207 binarytreenode*testcreate()

208

243int

main()

244

view code

參考:

鏈式二叉樹 操作總結

二叉樹中反覆使用遞迴思想,掌握尋找子問題的能力就能解決所有二叉樹問題。非遞迴先序遍歷需要用到資料結構棧,下文提供兩種思路解決。層序遍歷用到佇列,也即廣度遍歷思想。完整 github 構建二叉樹的結點 pbtnode buybintreenode btdatatype data 建立二叉樹 void ...

二叉樹基礎操作總結

1.定義資料結構 二叉樹 typedef char btdatatype typedef struct binarytreenode btnode 2.各個函式介面宣告 建立乙個二叉樹結點 btnode buybtnode btdatatype x 建立一顆二叉樹 btnode binarytree...

二叉樹總結

二叉樹遍歷總結 已知一棵二叉樹的前根序序列和中根序序列,構造該二叉樹的過程如下 1.根據前根序序列的第乙個元素建立根結點 2.在中根序序列中找到該元素,確定根結點的左右子樹的中根序序列 3.在前根序序列中確定左右子樹的前根序序列 4.由左子樹的前根序序列和中根序序列建立左子樹 5.由右子樹的前根序序...