資料結構 二叉樹

2021-10-14 18:31:41 字數 3411 閱讀 7615

1. 樹

一種非線性的資料結構,由n(n>=0)個有效結點組成的乙個具有層次關係的集合。

樹的特點:

(1)有乙個特殊的結點,稱為根結點,根結點沒有前驅結點;

(2)每棵子樹的根結點有且只有乙個前驅,可以有0個或多個後繼;

(3)樹是遞迴定義的。

2.二叉樹

一棵二叉樹是結點的乙個有限集合,該集合或者為空,或者是由乙個根節點加上兩棵別稱為左子樹和右子樹的二叉樹組成。

二叉樹的特點:

(1)每個結點最多有兩棵子樹,即二叉樹不存在度大於2的結點;

(2)二叉樹的子樹有左右之分,其子樹的次序不能顛倒。

二叉樹的性質

(1) 對任何一棵二叉樹, 如果度為0其葉結點個數為 n0, 度為2的分支結點個數為 n2,則有n0=n2+1

(2)對於具有n個結點的完全二叉樹,如果按照從上至下從左至右的陣列順序對所有節點從0開始編號,則對於序號為i的結點有:

若i>0,i位置節點的雙親序號:(i-1)/2;i=0,i為根節點編號,無雙親節點

若2i+1=n否則無左孩子

若2i+2=n否則無右孩子

3.滿二叉樹和完全二叉樹

4.二叉樹鏈式結構遍歷

(1)前序遍歷:根–左子樹–右子樹;

(2)中序遍歷:左子樹–根--右子樹;

(3)後序遍歷:左子樹–右子樹–根。

5. 二叉樹的操作(建立、銷毀、結點個數、葉子結點個數、第k層結點個數、查詢資料、前序遍歷、中序遍歷、後序遍歷、層次遍歷)

#include

#include

typedef

char btdatatype;

typedef

struct binarytreenode

btnode;

// 通過前序遍歷的陣列"abd##e#h##cf##g##"構建二叉樹

btnode*

binarytreecreate

(btdatatype* a,

int n,

int* pi)

//當前樹的根結點

btnode* root =

(btnode*

)malloc

(sizeof

(btnode));

root-

>_data = a[

*pi];(

*pi)++;

root-

>_left =

binarytreecreate

(a,n,pi)

; root-

>_right =

binarytreecreate

(a, n, pi)

;return root;

}// 二叉樹銷毀

void

binarytreedestory

(btnode*

* root)

}// 二叉樹節點個數 左子樹個數+右子樹個數+當前結點

intbinarytreesize

(btnode* root)

// 二叉樹葉子節點個數

intbinarytreeleafsize

(btnode* root)

// 二叉樹第k層節點個數 左右子樹k-1層結點個數之和

intbinarytreelevelksize

(btnode* root,

int k)

// 二叉樹查詢值為x的節點

btnode*

binarytreefind

(btnode* root, btdatatype x)

else

return

null;}

// 二叉樹前序遍歷 根 左子樹 右子樹

void

binarytreeprevorder

(btnode* root)

}// 二叉樹中序遍歷 左子樹 根 右子樹

void

binarytreeinorder

(btnode* root)

}// 二叉樹後序遍歷 左子樹 右子樹 根

void

binarytreepostorder

(btnode* root)

}//隊尾入隊,隊頭出隊

typedef qdatatype;

typedef

struct qnode

qnode;

// 佇列的結構

typedef

struct queue

queue;

struct qnode*

creatnode

(qdatatype val)

//初始化

void

initqueue

(queue* q)

void

queuepush

(queue* q, qdatatype val)

++q-

>_size;

}void

queuepop

(queue* q)

qdatatype queuefront

(queue* q)

intqueueempty

(queue* q)

void

queuedestroy

(queue* q)

}// 層序遍歷

void

binarytreelevelorder

(btnode* root)

if(node-

>_right)

queuepop

(&q);}

queuedestroy

(&q);}

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

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

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.二叉樹的實現 有兩種實現方式,...