二叉排序樹的刪除操作

2021-07-27 17:52:31 字數 584 閱讀 7675

先來看這個二叉排序樹

下面是討論刪除的情況:

我們知道,如果要刪除的葉子結點,則可以直接刪除。

但如果刪除的不是葉子結點呢?

我們知道這個樹的中序遍歷如下:

也就是說,比如要刪除105,則我們可以把104,或108提上去覆蓋掉,這樣實現了刪除,又不保證了他是二叉排序樹。

下面是**

status deletebst(bitree *t, int key)

else

else if( key < (*t)->data )

else

}}status delete(bitree *p)

else if( (*p)->lchild == null )

else

(*p)->data = s->data;

if( q != *p )

else

free(s);

}return true;

}

二叉排序樹的刪除操作

二叉排序樹,刪除操作主要針對三種情況。1 葉子節點 直接刪除就可以了 2 沒有左孩子的節點 直接嫁接右子樹就可以了 沒有右孩子的節點 直接嫁接左子樹就可以了 3 如果左右子樹都存在,則尋找刪除節點的直接前驅 即左子樹裡面的最右的節點 程式設計時需要注意,函式時針對指標的操作,因此為了修改指標,要使用...

二叉排序樹刪除

二叉排序樹的刪除情況比較複雜,有以下三種情況需要考慮 第一種情況 刪除葉子節點 思路 第二種情況 刪除只有一棵子樹的節點,比如1 思路 如果targetnode有右子節點 第三種情況 刪除有兩棵子樹的節點 比如 7,3,10 思路 public class binarysorttreedemo bi...

構造二叉排序樹(BST) 二叉排序樹的刪除

主要是刪除操作 include include using namespace std typedef int elementtype typedef struct treenode threadtree void visit treenode node void inorder threadtre...