對於二叉樹,有前序、中序、後序三種遍歷方法,由於樹的定義本身就是遞迴定義的,故採用遞迴方法實現三種遍歷簡潔易懂。若採用非遞迴訪問,則需要使用棧來模擬遞迴的實現。三種遍歷的非遞迴演算法中,前序和後序較容易,而後序相對較難。
前序遍歷
遞迴非遞迴
樹的遍歷
中序遍歷
遞迴非遞迴
後序遍歷
遞迴非遞迴
層次遍歷
計算樹高
計算結點數
1. 前序遍歷【訪問順序:根結點-左孩子-右孩子】
a> 前序遍歷遞迴實現
1b> 前序遍歷非遞迴實現void preorderrecursively(binarytreenode *root)
2 9 }
12. 中序遍歷【訪問順序:左孩子-根結點-右孩子】void preorder(binarytreenode *root)
2 20 }
a> 中序遍歷遞迴實現
1b> 中序遍歷非遞迴實現void inorderrecursively(binarytreenode *root)
2 9 }
13. 後序遍歷【訪問順序:左孩子-右孩子-根結點】void inorder(binarytreenode *root)
2 22
23if(!s.empty())//
第二種情況
2430
}31 }
a> 後序遍歷遞迴實現
1b>後序遍歷非遞迴實現void postorderrecursively(binarytreenode *root)
2 9 }
14.層次遍歷void postorder(binarytreenode *root)
2 31
else
3238
}39 }
15.計算樹高和結點數void levelorder(binarytreenode *root)
2 19 }
1【 完整**】int treeheight(binarytreenode *root)//
計算樹高
2 12
13int countnode(binarytreenode *root)
14
1 #include "view codestdafx.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
參考:
鏈式二叉樹 操作總結
二叉樹中反覆使用遞迴思想,掌握尋找子問題的能力就能解決所有二叉樹問題。非遞迴先序遍歷需要用到資料結構棧,下文提供兩種思路解決。層序遍歷用到佇列,也即廣度遍歷思想。完整 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.由右子樹的前根序序...