二叉排序樹的刪除

2021-10-09 20:16:46 字數 3084 閱讀 6022

二叉排序樹的刪除

刪除會有三種情況

刪除葉子節點

刪除只有一棵子樹的節點

刪除含有兩棵子樹的節點

思路圖的分析

第一種情況: 刪除葉子節點

1.需要先去找到要刪除的節點 targetnode

2.找到targetnode的父節點parent

3.確定targetnode是parentnode的左子節點還是右子節點

4.根據目前的情況來對應刪除

第二種情況:刪除只有一棵子樹的節點

1.需要先去找到要刪除的節點 targetnode

2.找到targetnode的父節點parentnode

3.確定targetnode的子節點是左子節點還是有子節點

4.targetnode是parentnode的左子節點還是右子節點

。。。。。。。。

。。。。。。。。

(不總結了)

直接上**

package bsttree;

public

class

binarysorttreetest

;// 把這個資料元素新增到這個集合進行處理 //新增元素

for(

int i =

0; i < arr.length; i++

)// 模擬刪除

bst.

delnode(3

);// 遍歷元素

bst.

infixorder()

;}}//這是一顆二叉排序樹

class

binarysorttree2

// 新增

public

void

add(node2 node)

else

}// 遍歷

public

void

infixorder()

else

}// 查詢要刪除的節點

public node2 search

(int value)

else

}// 查詢要刪除節點的父節點

public node2 searchparent

(int value)

else

}// 編寫方法

// 1.返回以node為根節點的二叉樹的最小節點的值

// 2.刪除node為為根節點的二叉排序樹的最小節點

///**

* * @param node 傳入的節點(當作二叉排序的根節點)

* @return 返回以node為根節點的二叉樹的最小節點的值

*/public

intdellefttreemin

(node2 node)

int temp = target.value;

delnode

(target.value)

;return temp;

}// 刪除節點

public

void

delnode

(int value)

else

// 如果我們發現當前這棵二叉排序樹只有一顆節點

if(root.left == null && root.right == null)

// 去找到targetnode的父節點

node2 parentnode =

searchparent

(value)

;// ^^^^^^______^^^^^^如果要刪除的為葉子節點

if(targetnode.left == null && targetnode.right == null)

else

if(parentnode.right != null && parentnode.right.value == value)

}else

if(targetnode.left != null && targetnode.right != null)

else

else

}else

else}}

}}}//建立樹的節點

class

node2

// 遍歷

public

void

infixorder()

system.out.

println

(this

.value);if

(this

.right != null)

}// 新增

public

void

add(node2 node)if(

this

.value > node.value)

else

}else

else}}

// 查詢

public node2 search

(int value)

else

if(value <

this

.value)

return

this

.left.

search

(value);}

else

return

this

.right.

search

(value);}

}// 查詢此節點的父節點

public node2 searchparent

(int value)

else

else

if(value >=

this

.value &&

this

.right != null)

else}}

}

二叉排序樹刪除

二叉排序樹的刪除情況比較複雜,有以下三種情況需要考慮 第一種情況 刪除葉子節點 思路 第二種情況 刪除只有一棵子樹的節點,比如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...