二叉搜索树中删除节点

二叉搜索树中删除节点

问题

这个题目说的是,给你一棵二叉搜索树和一个数值,你要删除二叉搜索树上等于这个数值的节点,然后返回处理后的二叉搜索树。 注意,二叉搜索树的节点上没有重复数值,并且要求删除节点后返回的仍然是二叉搜索树。

比如说,给你的二叉搜索树是:

    1
   / \
  0   4
     / \
    2   8

给你的数值为 4。删掉 4 这个节点后,可以返回:

    1
   / \
  0   2
       \
        8

也可以返回:

    1
   / \
  0   8
     /
    2

这两个都是有效的二叉搜索树,返回其中一个即可。

代码

public class AlgoCasts {

  public class TreeNode {
    int val;
    TreeNode left;
    TreeNode right;

    TreeNode(int x) {
      val = x;
    }
  }

  // Time: O(h), Space: O(h)
  public TreeNode deleteNodeInBST(TreeNode root, int val) {
    if (root == null) return null;
    if (val < root.val) {
      root.left = deleteNodeInBST(root.left, val);
    } else if (val > root.val) {
      root.right = deleteNodeInBST(root.right, val);
    } else {
      if (root.left == null) return root.right;
      else if (root.right == null) return root.left;

      TreeNode leftMax = root.left;
      while (leftMax.right != null) leftMax = leftMax.right;
      leftMax.right = root.right;
      root = root.left;
    }
    return root;
  }

}

 上一篇
数组中第 K 大的元素 数组中第 K 大的元素
数组中第 K 大的元素问题 这个题目说的是,给你一个整数数组和一个整数 K,你要找到数组中第 K 大的元素。 比如说,给你的整数数组是: 4, 2, 8, 1, 8 整数 K 是 2。这个数组中第 2 大的元素是 8,因此你要返回 8。
2018-12-09
下一篇 
路径和是否等于给定值 路径和是否等于给定值
路径和是否等于给定值问题 这个题目说的是,给你一棵二叉树和一个整数,你要判断这棵二叉树上是否存在一条从根到叶子节点的路径,这条路径上所有节点中的数字相加等于给你的整数。 比如说,给你的二叉树是: 1 / \ 2
2018-12-09
  目录