資料結構 二叉樹

2021-09-27 07:41:11 字數 3437 閱讀 8972

二叉樹是每個結點最多有兩個子樹的樹結構。

一棵深度為k,且有2^k-1個結點的二叉樹,稱為滿二叉樹。這種樹的特點是每一層上的結點數都是最大結點數。

乙個二叉樹結點,分為三個域,第乙個域是左孩子指標,第二個域是存的資料,第三個域是右孩子指標。

;// 構建二叉樹

void

binarytreedestory

(btnode*

* root)

;// 銷毀二叉樹

intbinarytreesize

(btnode* root)

;// 二叉樹的結點個數

intbinarytreeleafsize

(btnode* root)

;// 二叉樹葉子結點個數

intbinarytreelevelksize

(btnode* root,

int k)

;// 二叉樹第k層結點個數

btnode*

binarytreefind

(btnode* root, btdatatype x)

;// 二叉樹查詢結點x

void

binarytreeprevorder

(btnode* root)

;// 先序遍歷

void

binarytreeinorder

(btnode* root)

;// 中序遍歷

void

binarytreepostorder

(btnode* root)

;// 後序遍歷

void

binarytreelevelorder

(btnode* root)

;// 層序遍歷

intbinarytreecomplete

(btnode* root)

;// 判斷二叉樹是否為完全二叉樹

4.1 構建二叉樹

動態申請二叉樹結點,一層一層將陣列中的元素匯入結點中。

btnode*

binarytreecreate

(btdatatype* a,

int* pi)

// 構建二叉樹

4.2 銷毀二叉樹

遞迴呼叫,把每個結點的空間釋放,並將指標置空。

void

binarytreedestory

(btnode*

* root)

// 銷毀二叉樹

4.3 返回二叉樹的結點個數

遞迴呼叫。

int

binarytreesize

(btnode* root)

// 二叉樹的結點個數

4.4 二叉樹葉子結點個數

葉子結點的判斷條件:葉子結點的左孩子和右孩子指標都指向空。

int

binarytreeleafsize

(btnode* root)

// 二叉樹葉子結點個數

4.5 返回第k層結點個數

第一層的結點數固定為1,左右子樹再分別遞迴呼叫。每一層的結點個數是左右子樹結點數的和。

int

binarytreelevelksize

(btnode* root,

int k)

// 二叉樹第k層結點個數

4.6 查詢結點x

同樣是遞迴呼叫,把每個結點都看作是當前子樹的根結點,左右子樹分別遞迴呼叫。

btnode*

binarytreefind

(btnode* root, btdatatype x)

// 二叉樹查詢結點x

4.7 先序遍歷

遞迴呼叫,左右子樹分別列印當前結點,直到該結點為空。

void

binarytreeprevorder

(btnode* root)

// 先序遍歷

4.8 中序遍歷

同先序遍歷,調換一下遞迴和列印的順序。

void

binarytreeinorder

(btnode* root)

// 中序遍歷

4.9 後序遍歷

同上遞迴,調換順序。

void

binarytreepostorder

(btnode* root)

// 後序遍歷

4.10 層序遍歷
void

binarytreelevelorder

(btnode* root)

// 層序遍歷

if(front->_right !=

null

)// 判斷該結點的右子樹是否為空,不為空,則右孩子結點入佇列

}}

4.11 判斷二叉樹是否為完全二叉樹

對於深度為k的,有n個結點的二叉樹,當且僅當其每乙個結點都與深度為k的滿二叉樹中編號從1至n的結點一一對應時稱之為完全二叉樹。

// 判斷二叉樹是否為完全二叉樹

while(!

queueempty

(&q)

)// 利用佇列結構,以先左後右的方式入佇列,如果當前節點不為空,則其左右孩子結點入佇列

else

break;}

while(!

queueempty

(&q)

)// 如果佇列元素中有null,且佇列不為空,則該二叉樹不是完全二叉樹。

}return true;

}

資料結構 二叉樹 反轉二叉樹

include using namespace std define maxsize 1000 struct binary tree node class queue queue queue void queue push binary tree node btn binary tree node ...

《資料結構》 二叉樹

二叉樹 是 n個結點的有限集,它或為空集,或由乙個根結點及兩棵互不相交的 分別稱為該根的左子樹和右子樹的二叉樹組成。二叉樹不是樹的特殊情況,這是兩種不同的資料結構 它與無序樹和度為 2的有序樹不同。二叉樹的性質 1 二叉樹第 i層上的結點數最多為 2 i 1 2 深度為 k的二叉樹至多有 2 k 1...

資料結構 二叉樹

1.二叉樹 二叉樹是一種特殊結構的樹,每個節點中最多有兩個子節點,如圖1所示 圖1 二叉樹 在圖1中的二叉樹裡,a c有兩個子節點,b d有乙個子節點。對於二叉樹還有圖2中的以下情況 圖2 二叉樹的特殊情況 在博文中還介紹了滿二叉樹和完全二叉樹還有其他的特殊二叉樹。2.二叉樹的實現 有兩種實現方式,...