[lintcode]87.删除二叉查找树的节点

描述:

给定一棵具有不同节点值的二叉查找树,删除树中与给定值相同的节点。如果树中没有相同值的节点,就不做任何处理。你应该保证处理之后的树仍是二叉查找树。

代码:

public TreeNode removeNode(TreeNode root, int value) {
        if (root == null){
            return null;
        }
        if (root.val == value){//当前节点值等于value值
            if (root.left == null && root.right == null){//当前节点没有左右孩子节点
                root = null;
            } else if (root.left == null){//当前节点只有右孩子节点
                root = root.right;
            } else if (root.right == null){//当前节点只有左孩子节点
                root = root.left;
            } else {//当前节点有左右孩子节点
                TreeNode tmp = root;
                tmp = tmp.left;
                while(tmp.right != null){
                    tmp = tmp.right;
                }
                root.val = tmp.val;
                root.left = removeNode(root.left,root.val);
            }
        } else if (value < root.val){//当前节点值大于value
            if (root.left == null){
                return root;
            }
            root.left = removeNode(root.left, value);
        } else {//当前节点值小于value
            if (root.right == null){
                return root;
            }
            root.right = removeNode(root.right,value);
        }
        return root;
    }

补充TreeNode类的定义

public class TreeNode {
      public int val;
      public TreeNode left, right;
      public TreeNode(int val) {
          this.val = val;
          this.left = this.right = null;
      }
  }

你可能感兴趣的:([lintcode]87.删除二叉查找树的节点)