搜尋
如上圖所示:圓圈代表結點,連線結點的線代表邊。樹由結點和連線結點的邊組成。
2、有根結點的父子關係:如圖根結點為0,連線根結點0到結點4最後一條邊連線著結點1和4,則結點1稱為結點4的父節點,結點4 為結點1 的子節點。結點2,3為結點4的兄弟結點。
3、根結點:沒有父節點的結點(唯一)
外部結點(葉結點):沒有子節點的結點(如4,5)
內部結點:除葉節點以外的結點
結點度、高、深度
1、結點的度:乙個結點擁有的子節點總數稱為結點的度(如節點2,有三個子節點,則節點2的度為3);
2、結點的深度:根結點到某一節點(x)的路徑的長度稱為 結點x 的深度(如節點2,根結點到2 只經過一條邊,則x的深度為1);
3、結點的高:某一節點(x)到子結點的最大路經長稱為結點x的高(如節點2,到子節點11(12)路徑最長,高度位2)
一顆數的根結點的高度最大,(如節點8,其深度為2,高為1,樹高為3)
二叉樹1、概念:擁有乙個根結點,且其他結點的子結點數都不超過2。
2、有序樹:在二叉樹中,每個結點的子節點數不超過2個,而且還分左節點和右節點,像這種子節點有特定順序的樹稱為有序樹。
// 二叉樹的表達
//輸入結點個數n,每個結點資訊,id(結點編號)left(左子結點編號)
right(右子結點編號。
//輸出node:id :parent = p,sibling = s,degree = deg (度)
,depth = dep(深度),height = h(高),
type(結點型別(根,葉或者內結點)
#include
#define max
10000
#define nil-1
using namespace std;
typedef struct node
node;
node t
[max];
int n,d
[max],
h[max]
;int getheight
(int u)if(
t[u]
.right !=
nil)
h[u]
=max
(h1,h2)
;return
h[u];}
void
getdepth
(int u, int d)if(
t[u]
.right!=
nil)
}int getsibling
(int u)if(
t[t[u]
.parent]
.left!=u &&t[
t[u]
.parent]
.left!=
nil)if(
t[t[u]
.parent]
.right!=u &&t[
t[u]
.parent]
.right!=
nil)
return
nil;
}void
print
(int u)
int main()
for(int i=
0;i<
n;i++
)for
(int i=
0;i<
n;i++
)getdepth
(root,0)
;getheight
(root)
;for
(int i=
0;i<
n;i++
)return0;
}
樹的遍歷
1、前序遍歷:按照根結點、左子樹、右子樹的順序輸出結點編號。
下面展示一些內聯**片
。
// 前序,先訪問u,列印出結點u,然後執行preparse(t[u].left)
訪問u的左子樹,處理完畢再執行preparse(t[u].right)訪問u的右子樹,
u=nil時沒有後續結點,函式結束。其他兩種只是列印順序的調整
void
preparse
(int u)
2、中序遍歷:按照左子樹、根結點、右子樹的順序輸出結點編號。
void
inparse
(int u)
inparse(t
[u].left)
; cout<" ";
inparse(t
[u].right)
;}
3、後續遍歷:按照左子樹、右子樹、根結點的順序輸出結點編號。
void
postparse
(int u)
postparse(t
[u].left)
;postparse(t
[u].right)
; cout<" ";
}
樹的重建
比如當我們知道乙個樹的前序排列,中序排列,讓我們來求這個數的後序排列,這其實就是一種樹的重建。
下面這段**就是根據已知的前序,中序排列,求樹的後序排列。
//前序排列為1 2 3 4 5 6 7 8 9
//中序排列為3 2 5 4 6 1 8 7 9
//先遍歷前序排列,當前結點為c,然後可以通過查詢結點c在in中的位置m,
m的左邊就是c的左子樹,右邊就是c的右子樹,然後一步一步找下去。
void
reconstruction
(int left,int right)
int root =
pre(pos++);
int m =
distance(in
.begin()
,find(in
.begin()
,in.end()
,root));
reconstruction
(left,m)
;reconstruction
(m+1
,right)
; post.
push_back
(root)
;}
資料結構與演算法 樹
後序遍歷 已知前序和中序求後序 設計 的原則 1 有且僅有乙個根節點 2 所有的子樹也滿足該要求 子樹之間不能有交集 單個節點也是一棵樹 空樹 啥資料都沒有,沒有任何節點 根節點 父節點,子節點,兄弟節點 如果兩個節點的父節點雖不相同,但是它們的父節點處在同一層次上,那麼這兩個節點是兄弟節點 葉子節...
資料結構與演算法(樹)
1 樹的定義 2 基本術語 3 樹的性質 1 二叉樹定義及特性 2 二叉樹的儲存結構 1 二叉樹遍歷 1 樹的儲存結構 2 樹 森林 二叉樹的轉換 樹轉換為二叉樹的規則 每個節點左指標指向它的第乙個孩子,右指標指向它在樹種的相鄰右兄弟。根節點沒有兄弟,所以對應二叉樹沒有右子樹。樹轉換為二叉樹的方法 ...
資料結構與演算法 樹 B樹
概述 b樹也稱b 樹。b樹中所有結點中孩子結點個數的最大值成為b樹的階,通常用m表示,從查詢效率考慮,一般要求m 3。一棵m階b樹或者是一棵空樹,或者是滿足以下條件的m叉樹。定義 b樹是一種平衡的多分樹,通常我們說m階的b樹,它必須滿足如下條件 根結點至少有兩個子女。每個中間節點都包含k 1個元素和...