《演算法筆記》9 1 樹與二叉樹

2021-10-05 12:11:40 字數 1311 閱讀 1299

一.樹的定義與性質

1.空樹:沒有結點的樹;

2.樹的層次:根結點為第一層,根節點子樹的根節點為第二層;

3.度:結點子樹的棵樹,葉結點度為0;

4.有 n 個結點的樹,邊數為 n - 1;

5.結點的深度:從根結點(深度為1)開始,自頂向下;

結點的高度:從葉結點(高度為1)開始,自底向上;

二.二叉樹的遞迴定義

1.第一種情況:二叉樹是空樹;第二種情況:二叉樹由根節點、左子樹、右子樹構成;

2.二叉樹與度為2的樹:二叉樹不能隨意交換左右兩棵子樹的位置,樹的結點的子樹是不區分左右順序的;

3.滿二叉樹:每一層的結點數都達到最大;

完全二叉樹:除了最下面一層,其餘層的結點數都達到了最大,最下面一層只從左到右連續存在若干結點,右邊的結點都不存在;

三.二叉樹的儲存結構與基本操作

1.二叉樹的儲存結構(利用鍊錶來定義):

struct node 

;

新建結點的函式:

node*

newnode

(int v)

2.二叉樹結點的查詢和修改:

void

search

(node* root,

int x,

int newdata)

3.二叉樹結點的插入:

void

insert

(node*

&root,

int x)

if(x應該插在左子樹)

insert

(root-

>lchild, x)

;else

insert

(root-

>rchild, x)

;}

根節點指標 root 為什麼使用引用?

insert(root, x) 中的 root 是上一層裡的 root->lchild / root->rchild,如果不用引用,改不了上一層的 struct,也就不能把新結點接到二叉樹上;

什麼時候使用引用:新建結點時,如果只是修改或遍歷,則不需加引用;

4.二叉樹的建立:

node*

create

(int data,

int n)

5.完全二叉樹的儲存結構:

使用陣列(大小為結點上限個數-1),根結點為1號位,任意結點(編號x)的左結點編號為 2x,右結點為 2x+1;

9 1樹與二叉樹

樹根抽象為根結點,樹葉概括為葉子結點。二叉樹 根結點與左子樹右子樹 分為滿二叉樹與完全二叉樹 二叉樹的相關 include includestruct node node root null 建立新的結點 node newnode int v 查詢 修改操作 void search node roo...

樹與二叉樹筆記

樹與二叉樹 二叉樹的性質 性質1 二叉樹中的第i i 0 層的結點數最多為2 i 性質2 深度為h h 1 的二叉樹最多有2 h 1個結點 性質3 對於任何一顆二叉樹,若其葉結點的個數為n0,度為2的結點n2,則有n0 n2 1 性質4 二叉樹的儲存結構 順序儲存 適合滿二叉樹或完全二叉樹 鏈式儲存...

二叉樹 滿二叉樹與完全二叉樹

二叉樹 binary tree 是n n 0 個元素的有限集合,該集合為空或者為由乙個稱為 根 的元素及兩個不相交的 被分別稱為左子樹和右子樹的二叉樹組成 二叉樹的基本特點 每個結點最多有兩棵子樹 左子樹和右子樹是有順序的,且不可顛倒 圖一1 結點 二叉樹中的每乙個元素都稱為結點。通常二叉樹的許多名...