Java 二叉搜索树-删除大于某个值的所有整数
我试图找出如何删除所有整数a,以便Java 二叉搜索树-删除大于某个值的所有整数,java,data-structures,binary-search-tree,Java,Data Structures,Binary Search Tree,我试图找出如何删除所有整数a,以便a>b其中a是二进制搜索树中的任何元素,b是BST中所有元素的比较阈值。到目前为止,我已经: public treeRemoveGreater(int x, BinaryNode node) { if (node.element > x) { //node.element accesses element of given node i.e. integer value remove(node.elem
a>b
其中a是二进制搜索树中的任何元素,b
是BST中所有元素的比较阈值。到目前为止,我已经:
public treeRemoveGreater(int x, BinaryNode node) {
if (node.element > x) {
//node.element accesses element of given node i.e. integer value
remove(node.element);
}
else {
//Traverse tree
}
我的问题是如何相应地遍历树。我知道这是一种有效的方法,因为不一定需要完全遍历树,我只是不确定如何继续 想想BST的属性。父节点等于或大于左侧的子节点,等于或小于右侧的节点。所以您需要找到B并删除其右侧的所有节点(只需确保右侧的节点不等于B,因为yur条件都是a>B)。就像Makoto说的,移除整个子树
|
+----8----+
| |
+----3----+ 10------+
| | |
1 +---6---+ +---14
| | |
4 7 13
考虑这个BST,如果你想删除大于6的元素,那么你必须删除
| |
+----7----+ 6
| | ---->
6 7
想象一下,你正在删除一整棵子树。当你到达一个节点时,如果它大于b,把它的左子树放在它的位置并重复。如果它小于b,继续向下向右子树。如果它正好是b,修剪右子树,你就完成了(假设多个b值沿着左子树)。