LeetCode——998.最大二叉树 II

通过万岁!!!

  • 题目:理解这个题之前,需要先了解另外一个题目。之前的题目大致意思是,给你一个数组,然后找数组中的最大值,然后最大值是一个节点,最大值左边的是其左子树,右边是右子树。然后构建起一个二叉树来即可。现在这个题目就是给你这个已经构建好的树,然后问,如果之前的数组在最右侧再加一个数val,那么他形成的二叉树应该是什么样子的。让你返回这个二叉树。
  • 思路:首先,我们需要明确一个思路,就是这个一定在只看右子树即可,因为新加的这个数在最右侧。然后可以发现,其实就包含四种情况。第一种,val是最大的,那么val就是根节点,然后原来的树挂在右边即可。第二种:在往右边遍历的时候遇到了,也就是说,那么就额外加一个val对应的节点即可。第三种就是需要挂在最右侧的右子树。第四种就是挂在最右侧的左子树。
  • 技巧:树与数组的转换

java代码

class Solution {
    public TreeNode insertIntoMaxTree(TreeNode root, int val) {
        // 他一定要挂在右子树上
        if (val > root.val) {
            TreeNode treeVal = new TreeNode(val);
            treeVal.left = root;
            return treeVal;
        }
        recursionRight(root, val);
        return root;
    }


    private void recursionRight(TreeNode root, int val) {
        // 中途找到了
        if (root.right != null && root.right.val < val) {
            TreeNode newTree = new TreeNode(val);
            newTree.left = root.right;
            root.right = newTree;
            return;
        }
        // 找到了之前的最右侧
        if (root.right == null) {
            if (root.val > val) {
                root.right = new TreeNode(val);
                return;
            } else {
                // 替换val
                int oldVal = root.val;// 之前
                root.val = val;// 新节点过来
                TreeNode oldTree = new TreeNode(oldVal);// 旧节点
                oldTree.left = root.left;
                oldTree.right = root.right;
                root.left = oldTree;
            }
            return;
        }
        recursionRight(root.right, val);
    }
}
  • 总结:题目不是特别难,主要是首先明确一定是只找右子树即可。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值