leetcode中等450删除二叉搜索树中的节点 / 701二叉搜索树中的插入操作

Posted qq_40707462

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了leetcode中等450删除二叉搜索树中的节点 / 701二叉搜索树中的插入操作相关的知识,希望对你有一定的参考价值。

450、删除二叉搜索树中的节点



思路:

public TreeNode deleteNode(TreeNode root, int key) {
        if(root==null) return null;
        if(root.val==key){
			单层逻辑
        }
        if(root.val>key) root.left=deleteNode(root.left,key);
        if(root.val<key) root.right=deleteNode(root.right,key);
        return root;
    }

递三步:
①终止条件
②单层逻辑
③处理左右

每一层有以下五种情况:

  • 第一种情况:没找到删除的节点,遍历到空节点直接返回了 找到删除的节点
  • 第二种情况:左右孩子都为空(叶子节点),直接删除节点, 返回NULL为根节点
  • 第三种情况:删除节点的左孩子为空,右孩子不为空,删除节点,右孩子补位,返回右孩子为根节点
  • 第四种情况:删除节点的右孩子为空,左孩子不为空,删除节点,左孩子补位,返回左孩子为根节点
  • 第五种情况:左右孩子节点都不为空,则将删除节点的左孩子,放到删除节点的右子树的 最左面节点 的左孩子上,返回删除节点右孩子为新的根节点。

eg 5放在8下,9接替7的位置


class Solution {
    public TreeNode deleteNode(TreeNode root, int key) {
        if(root==null) return null;//一
        if(root.val==key){
            //二三四
            if(root.left==null) return root.right;
            else if(root.right==null) return root.left;
            //五,都不为空
            else{
                TreeNode node=root.right;//找到右子树最左边的节点
                while(node.left!=null) node=node.left;
                node.left=root.left;//root的左节点搬下来
                root=root.right;//替换root
                return root;
            }
        }
        if(root.val>key) root.left=deleteNode(root.left,key);
        if(root.val<key) root.right=deleteNode(root.right,key);
        return root;
    }
}

701、二叉搜索树中的插入操作

给定二叉搜索树(BST)的根节点和要插入树中的值,将值插入二叉搜索树。 返回插入后二叉搜索树的根节点。 输入数据 保证 ,新值和原始二叉搜索树中的任意节点值都不同。

注意,可能存在多种有效的插入方式,只要树在插入后仍保持为二叉搜索树即可。 你可以返回 任意有效的结果 。

注意!!一定可以插在树的叶子上

class Solution {
    public TreeNode insertIntoBST(TreeNode root, int val) {
        //一定可以插在树的叶子上
        if(root==null){
            TreeNode node=new TreeNode(val);
            return node;
        }
        if(root.val>val) root.left=insertIntoBST(root.left,val);
        if(root.val<val) root.right=insertIntoBST(root.right,val);

        return root;
    }
}

以上是关于leetcode中等450删除二叉搜索树中的节点 / 701二叉搜索树中的插入操作的主要内容,如果未能解决你的问题,请参考以下文章

LeetCode Java刷题笔记— 450. 删除二叉搜索树中的节点

[JavaScript 刷题] 树 - 删除二叉搜索树中的节点, leetcode 450

[JavaScript 刷题] 树 - 删除二叉搜索树中的节点, leetcode 450

LeetCode 二叉树专项删除二叉搜索树中的节点(450)

Leetcode刷题Python450. 删除二叉搜索树中的节点

LeetCode 450 删除二叉搜索树中的节点[dfs] HERODING的LeetCode之路