二叉搜索树 - 删除所有大于特定值的整数

Binary Search Tree - Removing all ints greater than certain value

我想弄清楚如何删除所有整数 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.element);
       }
       else {
          //Traverse tree 
       }

我的问题是弄清楚如何相应地遍历树。我知道有一种有效的方式来解决这个问题,因为不一定需要完全遍历树,我只是不确定如何进行。

想想 BST 的 属性。父节点等于或大于左边的子节点,等于或小于右边的子节点。所以你需要找到 B 并删除它右边的所有节点(只要确保右边没有节点等于 B,因为你的条件都是 a > b)。正如 Makoto 所说,删除整个子树。

                      |
                 +----8----+
                 |         |
            +----3----+    10------+
            |         |            |
            1     +---6---+    +---14  
                  |       |    |
                  4       7    13

考虑这个 BST,如果你想删除大于 6 的元素,那么你必须删除

  1. “6”的右边child/sub-tree,所以可以消去
  2. 但是你得从根开始遍历。所以检查根大于你的 'a' (在这种情况下 8>6),
  3. 将左边的 sub-tree 作为主树(根为 '3')并将根与你的 'a' 进行比较,如果它仍然更大则重复步骤 2(或)
  4. 如果新的根小于'a'然后向右遍历child(这里3!> 6,所以从这里开始你不会碰到根)
  5. 然后检查右节点等于'a'在这种情况下,所以去它的右节点检查你是否有重复的元素等于a(如果存在则遍历该节点并将它的右边 child 设置为 'null'
  6. 如果向右移动时发现一个大于 6 的元素(在这种情况下,如果你在 6 的位置找到 7,在 4 的位置找到 6),那么你必须使子树的根及其左树

         |                                 |
    +----7----+                            6
    |         |          ---->     
    6         7