二叉樹插入和刪除操作的遞迴實現(c語言)

2021-08-19 11:20:43 字數 2010 閱讀 1002

鍊錶和陣列是最常見的資料結構,對於資料結構來說,查詢(find),最大最小值(findmin,findmax),插入(insert)和刪除(delete)操作是最基本的操作。對於鍊錶和陣列來說,這些操作的時間界為o(n),其中n為元素的個數。陣列的插入和刪除需要對其他一些元素進行額外的移動操作,鍊錶的查詢操作是按順序進行的,元素比較多的時候遍歷操作需要花很多的時間。

直觀上來講,陣列和鍊錶都是線性結構,而二叉樹每個節點的基本元素有三個,即關鍵字(element),左孩子(left)和右孩子(right),整體上呈現分支結構,這樣每個結構的長度就縮短了。因為二叉樹有乙個基本性質,即對每個節點來說,其左子樹的所有節點關鍵字不大於該節點的關鍵字大小,其右子樹的所有節點的關鍵字不小於該節點的關鍵字大小,所以使得對二叉樹資料結構的基本操作都是沿分支路徑進行的(它的結構使得這一操作是正確的),操作時間大大減少。可以證明,如果一棵二叉樹的樹高為h,則上述操作的時間界是o(h)。

#include #include #ifndef _tree_h

struct treenode;

typedef struct treenode *position;

typedef struct treenode *searchtree;

searchtree makeempty(searchtree t);

position find(int x, searchtree t);

position findmin(searchtree t);

position findmax(searchtree t);

searchtree insert(int x, searchtree t);

searchtree delete(int x, searchtree t);

#endif /*_tree_h*/

struct treenode

;/*把一棵樹清空*/

searchtree

makeempty(searchtree t)

return null;

}/*查詢操作*/

/*方法:從根節點開始,將欲查詢的元素x與節點關鍵字作比較,如果比x小,則沿該節點右子樹進行查詢,

如果比x大,則沿該節點左子樹進行查詢*/

position

find(int x, searchtree t)

/*查詢最小元素*/

/*方法:從根節點開始,沿左子樹進行尋訪,直到找到最左分支路徑上最深的節點*/

position

findmin(searchtree t)

/*查詢最大元素*/

/*方法:從根節點開始,沿右子樹進行尋訪,直到找到最右分支路徑上最深的節點*/

/*對於insert(x,t)函式來說,只有形參t==null時,返回值發生變化,否則每次遞迴結束,

返回值都和形參相等,此時t->left/right=insert()不改變樹的結構。*/

position

findmax(searchtree t)

/*插入操作*/

/*方法:從根節點開始,通過將待插入元素x與節點元素進行比較,把x插入到尋訪路徑的最後乙個節點上*/

searchtree

insert(int x, searchtree t)

} return t;

}/*刪除操作*/

/*方法:先找到要刪除的元素x所在的節點,然後按照該節點t的結構分成三種情況:

case1:t為葉節點。處理方法:直接將t刪除即可,把t置為null;

case2:t有且僅有乙個子樹。處理方法:將t刪除,然後將其子樹移到t的位置;

case3:t有兩個子樹。處理方法:先找到x的後繼y(y一定在t的右子樹中),然

後將t與y交換,最後把y刪除。*/

searchtree

delete(int x, searchtree t)

else //case1和case2;

return t;

}

二叉樹插入操作

功能 將乙個節點插入到二叉樹中節點的子節點中 輸入 p,c rl p 節點將插入到p所指向的節點的子節點中 c 指向待插入的節點 rl 為0表示插入到左子樹,為1表示插入到右子樹 輸出 bool template bool binarytree insertchild btnode p,btnode...

(二叉樹)二叉搜尋樹的查詢 插入和刪除

二叉搜尋樹或者是一棵空樹,或者是具有下列性質的二叉樹 若它的左子樹不空,則左子樹上所有結點的值均小於它的根結點的值 若它的右子樹不空,則右子樹上所有結點的值均大於它的根結點的值 它的左 右子樹也分別為二叉搜尋樹。二叉搜尋樹的特點之一即是其中序遍歷為公升序。根據二叉搜尋樹的性質,每個結點的值都是大於其...

java實現B樹 二叉樹 插入,刪除

b樹 二叉搜尋樹 定義 1 每個非葉子節點至多有兩個子節點。2 每個節點都儲存關鍵字值。3 其左子節點的關鍵字值小於該節點,且右子節點的關鍵字值大於或等於該節點。節點類 class node public void display b樹類 class treeelse else 只實現有乙個節點的刪...