二叉樹的儲存結構和基本操作

2021-10-17 19:38:28 字數 1721 閱讀 9051

1)二叉樹的儲存結構

一般來說,二叉樹使用鍊錶來定義—和動態鍊錶的定義一樣。

struct node

;

新建結點(例如往二叉樹中插入結點的時候)------實現**如下

//生成乙個新結點,v為結點的權值(資料域)

node*

newnode

(int v)

2)二叉樹結點的查詢、修改

查詢操作是指在給定資料域的條件下,在二叉樹中農找到所有資料域為給定資料域的結點,並將他們的資料域修改為給定的資料域。

void

search

(node* root,

int x,

int newdata)

if(root-

>data==x)

//找到資料域為x的結點,把它修改wienewdata

search

(root-

>lchild,x,newdata)

;//往左子樹搜尋x(遞迴式)

search

(root-

>rchild,x,newdata)

;//往右子樹搜尋x(遞迴式)

}

3)二叉樹結點的插入

注意:由於二叉樹的形態有多種,所以題目不說明二叉樹特點時很難給出結點插入的具體方法,所以需要記住:即二叉樹的插入位置就是資料域在二叉樹中查詢失敗的位置,而且這個位置是確定的,因此子遞迴查詢的過程中一定是根據二叉樹的性質來選擇左子樹或右子樹中農的一棵子樹進行遞迴,且最後到達空樹(死胡同)的地方就是查詢失敗的地方,也就是結點需要插入的地方。

node*

newnode

(int x)

void

insert

(node*

&root,

int x)

//注意根節點需要使用引用,否則插入不會成功

if(由二叉樹的性質,x應該插在左子樹)

else

}

注意:引用的作用是:即就是在函式中修改root會直接修改原變數。

什麼時候要加引用?

-------如果函式中需要新建結點,即對二叉樹的結構做出修改,就需要加引用;如果只是修改當前的內容,或僅僅是遍歷樹,就不加引用。

4)二叉樹的建立

//新建結點

node*

newnode

(x)//二叉樹結點的插入

void

insert

(node*

&root,

int x)

if(由二叉樹的性質,x應該插在左子樹)

else

}//二叉樹的建立

node*

create

(int data,

int n)

return root;

}

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

1 二叉樹一般使用鍊錶來儲存的,但又與一般鍊錶不同。因為二叉樹的結點有兩個出邊 左右子樹 所以鍊錶的指標域要有兩個指標分別指向結點的左右子樹的根結點的位址,把這種結構又稱為二叉鍊錶。2 定義如下 struct node node root null 3 新建乙個結點的函式 例如往二叉樹中插入新結點時...

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

一般來說,二叉樹使用鍊錶來定義。和普通鍊錶的區別是,由於二叉樹的每個結點有兩條出邊,因此指標變成了兩個 分別指向左子樹的根節點位址和右子樹的根節點的位址。如果某個子樹不存在,則指向null,其他地方和普通鍊錶完全相同,因此又把這種鍊錶叫做二叉鍊錶。定義方式如下 struct node 由於在二叉樹中...

二叉樹的順序儲存和基本操作

一 二叉樹的定義 二叉樹是n個結點的有限集合,當n 0時稱為空樹,否則 1 有且只有乙個特殊的被稱為樹的根結點 2 若n 1時,其餘的結點被分為兩個互不相交的子集,稱為左右子樹,並且左右子樹都是二叉樹 可以看出二叉樹的定義是遞迴的。二 二叉樹的性質 1 在非空二叉樹上,第i層至多有2 i 1 個結點...