我试图找出如何删除所有整数,使得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
}
我的问题是弄清楚如何相应地遍历树。我知道有一种有效的方式可以解决这个问题,因为不需要完全遍历树,我只是不确定如何继续。
答案 0 :(得分:1)
想想BST的财产。父节点等于或大于左边的子节点,等于或小于右边的节点。所以你需要找到B并删除它右边的所有节点(只要确保右边的节点不等于B,因为你的条件都是> b)。就像Makoto说的那样删除整个子树。
答案 1 :(得分:1)
|
+----8----+
| |
+----3----+ 10------+
| | |
1 +---6---+ +---14
| | |
4 7 13
考虑这个BST,如果你想删除大于6的元素,那么你必须删除
如果向右移动,你会发现一个比6更大的元素(在这种情况下,如果你找到7代替6和6代替4),那么你必须做出根的左树的子树
| |
+----7----+ 6
| | ---->
6 7