二叉搜尋樹的增刪查改

2021-10-05 11:35:35 字數 1322 閱讀 1224

在實際生產中,一棵二叉搜尋樹的平均深度是log(n),所以通常是遞迴的編寫二叉樹的操作**,不需要太擔心爆棧的問題

對二叉樹的所有操作,無非就是從根節點、左子樹、右子樹這三者中入手,分析基本的、可能的情況後,再遞迴的編寫相應的操作即可。

我們的重點放在insert()操作和**delete()**操作中。

insert()

首先,我們需要先定義insert()函式,它的作用是將乙個新元素新增到bst中,然後返回插入新元素後的bst。

如何將新元素插入到一棵bst中。我們從根節點、左子樹、右子樹這三者中入手。

根節點:根節點為空(為空樹),直接將該新元素新增到樹中。

左子樹:比根節點小,新增到左子樹中。

右子樹:比根節點大,新增到右子樹中。

searchtree

insert

( elementtype x , searchtree t )

else

if( x < t->element )

else

if( x > t->element )

return t;

}

delete()

delete()的作用是在給定的bst中刪除乙個目標元素,並返回刪除後的bst

1.刪除操作依然從根節點左子樹、右子樹這三者中入手。

2.根節點:當前節點即為目標節點。有三種情況:

a.該節點是樹葉,直接刪除。

b.該節點有乙個兒子。

c.該節點有兩個兒子。

3.左子樹:待刪除的節點在左子樹中,在左子樹中刪除。

4.右子樹:待刪除的節點再右子樹中,在右子樹中刪除。

接下來,再具體分析:

1.樹葉節點:待刪除的節點是樹葉,直接刪除。

2.乙個兒子:將指向該節點的指標調整為指向該節點的兒子節點。

3.兩個兒子:在 x 的右子樹中尋找乙個最小元素min,使用min代替 x ,然後刪除min,因為右子樹中的最小的節點 x 不可能有左兒子,所以第二次delete()更容易,也就是刪除只有乙個兒子的情況

searchtree

delete

( elementtype x , searchtree t )

else

return t;

}

總結 :對二叉樹的刪除操作是在分析基本情況後,將不符合基本情況的轉換為基本情況,最後得到答案。需要注意的是遞迴函式是返回一棵刪除後的子樹。

二叉搜尋樹 增刪查

性質 每個節點的key值各不相同 左子樹上所有節點的key值小於根結點 右子樹上的所有節點key值大於根結點 左右子樹都是二叉搜尋樹 insert插入 bool insert const k key 非遞迴插入 node cur root node parent null while cur els...

二叉搜尋樹的增刪改查

二叉搜尋樹 binary search tree 簡稱 bst,是一種特殊形式的二叉樹。二叉搜尋樹的的結構有兩種可能 對於二叉搜尋樹,需要掌握基本的操作 當要查詢目標值的節點時,我們可以根據二叉樹的結點資料值的有序性 左孩子 根結點 右孩子 根據以下思路進行查詢 簡單實現 返回以目標值結點為根結點的...

二叉查詢樹(增 刪 查)

原理 按照大的向右小的向左原則,沿著樹的根節點往下找,找到第乙個為空的節點或者節點的key和目標key相同時結束,前者插入,後者替換。description 插入節點 param key param value author wjc920 date 2018年6月26日 public void pu...