leetcode450. 删除二叉搜索树中的节点

leetcode450. 删除二叉搜索树中的节点,第1张

一:题目

二:上码
/**
 * Definition for a binary tree node.
 * public class TreeNode {
 *     int val;
 *     TreeNode left;
 *     TreeNode right;
 *     TreeNode() {}
 *     TreeNode(int val) { this.val = val; }
 *     TreeNode(int val, TreeNode left, TreeNode right) {
 *         this.val = val;
 *         this.left = left;
 *         this.right = right;
 *     }
 * }
 */
class Solution {
    /**
        递归:
        1.确定递归参数和返回值
            返回值的话 我们这里最终返回的还是TreeNode 因为这里要的还是二叉树。
        2.确定递归的终止条件
            遍历到所有结点都没找到  返回 null    
        3.递归体当中可以分为5种情况
            1>:未找到key 那么的话我们就返回null 
            2>:找到了key 但是root.left == null 那么右子树顶替直接返回root.right
            3>:找到了key 但是root.right == null 那么右子树顶替直接返回root.left
            4>:找到了key 但是左右子树都为空 那么的话 直接删除
            5>:找到了key 但是左右子树都不为空 那么的话 我们是root.ringt顶上去,然后将root.left放到
                root.left子树中最左下的一个结点旁边,因为root.right中所有的结点是比root.left中的结点
                的值大的,那么的话我们我们就需要将root.left子树放到root.right子树中最小的一个结点下面 
     */
    public TreeNode deleteNode(TreeNode root, int key) {
        if (root == null) return null;

        if (root.val > key) root.left = deleteNode(root.left,key);
        else if (root.val < key) root.right = deleteNode(root.right,key);
        else {
                 System.out.println("wyj");
                if (root.left == null && root.right == null) {
                    root = null;
                    return root;
                } else if (root.left != null && root.right == null) {
                    root = root.left;
                    return  root; 
                } else if (root.right != null && root.left == null) {
                    root = root.right;
                    return root;
                } else {
                    TreeNode temp = root.right;
                    while (temp.left != null) {
                        temp = temp.left;
                    }
                    temp.left = root.left;
                    root = root.right;
                    
                    System.out.println("wyj");
                    return root;


                }
        }
//  System.out.println("wyj");
        return root;
    }
}

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/905713.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-15
下一篇 2022-05-15

发表评论

登录后才能评论

评论列表(0条)

保存