刪除操作首先查詢要刪除的結點,看是否在二叉排序樹中,若不在則不做任何操作;否則,假設要刪除的結點為p,結點p的雙親結點為f,並假設結點p是結點f的左孩子(右孩子的情況類似)。下面分三種情況討論:
1、若p為葉子結點,則可直接將其刪除;
2、若p結點只有左子樹或只有右子樹,直接改為其雙親結點f的左子樹;
3、若p既有左子樹,又有右子樹,此時有以下兩種處理方法:
方法一:首先找到p結點在中序序列中的直接前驅s結點,然後將p的左子樹,而將p的右子樹改為s的右子樹;
方法二:首先找到p結點在中序序列中的直接前驅s結點,然後用s結點的值替代p結點的值,再將s結點刪除,原s結點的左子樹改為s的雙親結點q的右子樹;
二叉排序樹刪除
二叉排序樹的刪除情況比較複雜,有以下三種情況需要考慮 第一種情況 刪除葉子節點 思路 第二種情況 刪除只有一棵子樹的節點,比如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...
二叉排序樹的刪除
對於一般的二叉樹來說,刪去樹中的乙個結點是沒有意義的,因為它將使以被刪除的結點為根的子樹變成森林,破壞了整棵樹的結構 但是,對於二叉排序樹,刪去樹上的乙個結點相當於刪去有序序列中的乙個記錄,只要在刪除某個結點後不改變二叉排序樹的特性即可。在二叉排序樹上刪除乙個結點的演算法如下 btree delet...