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

2021-09-12 13:17:52 字數 1364 閱讀 5176

1、二叉樹一般使用鍊錶來儲存的,但又與一般鍊錶不同。因為二叉樹的結點有兩個出邊(左右子樹),所以鍊錶的指標域要有兩個指標分別指向結點的左右子樹的根結點的位址,把這種結構又稱為二叉鍊錶。

2、定義如下:

struct node;
node* root=null;
3、新建乙個結點的函式(例如往二叉樹中插入新結點時)

node* newnode(int v)//要建立結點的權值為v

1、二叉樹的查詢與修改

思想:先判斷當前結點是否是要查詢的結點,如果是則對其進行修改;如果不是,則分別往該結點的左右孩子遞迴,直到當前結點為null時為止,舉例**如下:

void search(node* root,int x,int newdata)

if(root->data==v)

search(root->lchild,x,newdata);

search(root->rchild,x,newdata);

}

2、二叉樹的插入

二叉樹的插入操作相對來說較為靈活,插入為止根據題目要求而定。但是一般來說插入位置只有乙個,就有了這樣乙個結論:當查詢資料域失敗時的位置即為要插入的位置。

void insert(node* &root,int x)//insert修改的是root本身,而search修改的是root所指向的內容,所以insert需要新增『&』,否則就不能把新結點插入到二叉樹上

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

else

}

3、二叉樹的建立

建立其實就是一棵樹從無然後乙個結點乙個結點插入的過程,把需要插入的資料儲存在陣列中,然後使用insert函式插入到二叉樹中,並返回根結點的指標root;

node* create(int data,int n)

{ node* root=null;

for(int i=0;i*root是指獲取位址root指向的空間的內容,因此*root是無法用來判斷位址是否為空,也即無法判斷結點是否存在,若為空樹則root==null;說的通熟一點就是:前者是「結點存在但沒有內容」後者是「結點不存在」

完全二叉樹進行編號之後可以用陣列來進行儲存,該陣列中元素存放的順序恰好為該完全二叉樹的層序遍歷序列。

判斷某個結點是否為葉子結點:該結點的左子節點編號root*2大於結點總個數n;

判斷某個結點是否為空結點:該結點的下標root大於結點總個數n;

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

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

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

1 二叉樹的儲存結構 一般來說,二叉樹使用鍊錶來定義 和動態鍊錶的定義一樣。struct node 新建結點 例如往二叉樹中插入結點的時候 實現 如下 生成乙個新結點,v為結點的權值 資料域 node newnode int v 2 二叉樹結點的查詢 修改 查詢操作是指在給定資料域的條件下,在二叉樹...

樹與二叉樹的基本操作

二叉樹的鏈式儲存結構 typedef int elemtype typedef struct bitnode bitnode,bitree 統計二叉樹中度為0的結點個數 intnodedegree 0 bitree bt else return0 統計二叉樹中度為1的結點個數 intnodedegr...