BST的概念,以及查詢,插入,刪除演算法

2021-08-16 18:32:00 字數 1623 閱讀 8730

bst的概念

bst,又叫平衡二叉樹,是一種循關鍵碼訪問的二叉樹,並且要求保持順序性,即任一節點不小於其左後代,不大於其右後代(注意是後代,不是孩子)。bst的順序性使得其中序遍歷序列一定是單調非降的。

bst的查詢演算法

binnodepos(t) bst_search1(binnodepos(t)&v,const t& e,binnodepos(t)hot)

//遞迴基

hot=v;                          //當前非空節點

binnodepos(t)next=(v->data>e)?v->lc:v->rc;//根據當前節點的大小確定下一次搜尋的轉向

return bst_search1(next,e,hot); //遞迴查詢

}

上述是查詢演算法的遞迴實現,介面語義是hot指向被查詢到的那個節點的父親,若在樹中沒找到該節點,則hot為最後乙個試圖轉向的節點。

binnodepos(t) bst_search2(binnodepos(t)&v,const t& e,binnodepos(t)hot)

else

}return v;

}

bst的插入演算法得益於bst查詢演算法良好的語義介面,bst的插入演算法很容易實現。

templatebinnodepos(t)bst::insert(const t &e)

return x;

}

bst的刪除bst的刪除有些複雜,分為兩種情況:

(1)刪除的節點沒有左孩子或者是沒有右孩子,此時直接把另乙個非空的子節點取代刪除節點即可。

(2)刪除的節點既有左孩子,也有右孩子

為了保證bst的順序性,此時應該用待刪除節點的下乙個節點(指中序序列中)取代待刪除節點,並且調整節點間的父子關係。

binnodepos(t) bst_remove(binnodepos(t)&x,binnodepos(t)&hot)

pc=pc->lc;}}

swap(w->data,succ->data);//交換待刪除節點和下乙個節點的資料;

if(succ->parent==w)//如果待刪除節點是下乙個節點的父親(當待刪除節點的右子節點沒有左子時)

else//非第一種情況

hot=w->parent;//hot為待刪除節點之父

if(succ)succ->parent=hot;

release(x);

rease(x->data);

return succ;

}

二叉搜尋樹 BST 的查詢 插入 刪除操作

定義 二叉搜尋樹又叫二叉排序樹或二叉查詢樹,它是一棵空樹或者是具有以下性質的樹 1.節點的左子樹只包含小於當前節點的數。2.節點的右子樹只包含大於當前節點的數。3.所有左子樹和右子樹自身必須也是二叉搜尋樹。二叉搜尋樹的中序遍歷是有序的。二叉樹結構體 struct node 查詢操作 node sea...

二叉樹的遍歷 查詢 插入以及刪除

二叉樹的主要儲存方式是鏈結儲存,標準儲存結構也稱為二叉鍊錶。二叉鍊錶結點類的定義 struct node 常見的二叉樹遍歷方式下面給個例項來表示具體的遍歷方式 前序遍歷訪問順序 訪問根結點 左子樹 右子樹。首先訪問根結點a,然後左子樹l 因為l也採用前序遍歷的方式,則首先訪問l的左子樹b,b沒有孩子...

順序表的查詢 刪除 插入

遇到的問題 malloc realloc的用法 realloc 型別 realloc 原來的記憶體位址,新的大小 型別 指標的問題 要深刻理解指標,指標也是乙個變數,在函式傳遞引數的過程中,作為引數來講,傳遞的也是值。這個值就是指標本身的內容,即指標指向的位址。而 不是傳的指標。所以指標作為函式形參...