二叉排序樹的刪除情況比較複雜,有以下三種情況需要考慮
第一種情況:刪除葉子節點
思路:第二種情況:刪除只有一棵子樹的節點,比如1
思路:如果targetnode有右子節點
第三種情況:刪除有兩棵子樹的節點(比如:7,3,10)
思路:
public class binarysorttreedemo ;
binarysorttree binarysorttree = new binarysorttree();
for (int i = 0; i < arr.length; i++)
//遍歷
binarysorttree.midorder();
//測試刪除節點
binarysorttree.delnode(5);
binarysorttree.delnode(9);
binarysorttree.delnode(10);
binarysorttree.delnode(12);
binarysorttree.delnode(7);
binarysorttree.delnode(1);
binarysorttree.delnode(2);
binarysorttree.delnode(3);
system.out.println("刪除後");
binarysorttree.midorder();
}}class binarysorttree else
}//中序遍歷節點
public void midorder() else
}//查詢待刪除的節點
public node searchnode(int val) else
}//查詢待刪除的父節點
public node searchparentnode(int val) else
}//在待查詢二叉樹中找到最小的節點
public int searchrightmin(node node)
delnode(node.val); //刪除最小的節點
return node.val; //返回最小的節點值
}//刪除節點
public void delnode(int val) else
//如果這棵二叉樹只有乙個節點
if (this.root.left == null && this.root.right == null)
}//拿到待刪除節點的父節點
node parent = searchparentnode(val);
//如果刪除的葉子節點
if (targetnode.left == null && targetnode.right == null) else if (parent.right != null && parent.right.val == val)
} else if (targetnode.left != null && targetnode.right != null) else else else if(parent.right!=null && parent.right.val == val)
}}else else else if (parent.right!=null && parent.right.val == val)}}
}}}}class node
@override
public string tostring() ';
}//查詢待刪除節點的父節點
public node searchparentnode(int val) else else if (this.val <= val && this.right != null) else }}
//查詢到待刪除的節點
public node serachnode(int val) else if (this.val > val) else
} else else }}
//新增節點
public void addnode(node node) else
} else else }}
//中序遍歷
public void midorder()
system.out.println(this.val);
if (this.right != null) }}
構造二叉排序樹(BST) 二叉排序樹的刪除
主要是刪除操作 include include using namespace std typedef int elementtype typedef struct treenode threadtree void visit treenode node void inorder threadtre...
二叉排序樹的刪除
對於一般的二叉樹來說,刪去樹中的乙個結點是沒有意義的,因為它將使以被刪除的結點為根的子樹變成森林,破壞了整棵樹的結構 但是,對於二叉排序樹,刪去樹上的乙個結點相當於刪去有序序列中的乙個記錄,只要在刪除某個結點後不改變二叉排序樹的特性即可。在二叉排序樹上刪除乙個結點的演算法如下 btree delet...
二叉排序樹的刪除
在二叉排序樹中刪除一結點,要考慮刪除點子樹的情況,在刪除了指定點後,要將其子樹重新鏈結起來,分情況計論,如果想要刪除葉結點,只需將其父結點指向它的指標,指向null,再釋放它即可,如果被刪除結點的右子樹為空,可以拿它的左子樹結點頂替它的位置,再釋放它,如果被刪結點的左子樹為空,可以拿它的右子樹結子頂...