使用 Java 删除二叉搜索树中的节点

Deleting a node in a Binary Search Tree using Java

你能告诉我为什么这段代码不会删除 BST 中的节点吗?我的代码有没有逻辑错误?

    // To delete a node from the BST
public Node deleteNode(Node myRoot, int toDel) {
    if (myRoot == null) return null;
    else if (toDel < myRoot.data) myRoot.left = deleteNode(myRoot.left, toDel);
    else if (toDel > myRoot.data) myRoot.right = deleteNode(myRoot.right, toDel);
    else {
        // Leaf node
        if (myRoot.right == null && myRoot.left == null) {
            myRoot = null;
        } else if (myRoot.left == null) { // No left child
            myRoot = myRoot.right;
        } else if (myRoot.right==null){ // No right child
            myRoot = myRoot.left;
        }
    }
    return myRoot;
}

注意:- 此代码仅删除具有一个 child 或没有 child 的节点。我目前正在努力删除一个有 2 children 的节点,所以请不要为我解决这个问题。

如果 0 children,只需删除节点(return null)。

如果有1个child,只需将节点替换为非空的child即可。

public Node deleteNode(Node myRoot, int toDel) {
    if (myRoot == null) {
      return null;
    } else if (myRoot.data == toDel) {
      if (myRoot.left != null) {
          return myRoot.left;
      } else if (myRoot.right != null) {
          return myRoot.right;
      } else {
          return null;
      }
    }
    ...
   return myRoot;
}