【二叉树】最大二叉树 II

题目描述

最大树 定义:一棵树,并满足:其中每个节点的值都大于其子树中的任何其他值。

给你最大树的根节点 root 和一个整数 val 。

给定的树是利用 Construct(a) 例程从列表 a(root = Construct(a))递归地构建的:

  • 如果 a 为空,返回 null 。
  • 否则,令 a[i] 作为 a 的最大元素。创建一个值为 a[i] 的根节点 root 。
  • root 的左子树将被构建为 Construct([a[0], a[1], ..., a[i - 1]]) 。
  • root 的右子树将被构建为 Construct([a[i + 1], a[i + 2], ..., a[a.length - 1]]) 。
  • 返回 root 。

示例1:

输入:root = [4,1,3,null,null,2], val = 5
输出:[5,4,null,1,3,null,null,2]
解释:a = [1,4,2,3], b = [1,4,2,3,5]

解题思路

这道题最难的是理解题目,看了半天没有理解这道题,最后是看了别人的代码实现才知道要怎么做的。

其实就是在树中添加节点:

case1:  val > root.val 

 

case2:  val < node.val  && val > node.right.val

 case3: val < node.val && node.right == null

 

这里直接使用dfs做树的遍历就可以了,dfs遍历代码如下:


import org.example.TreeNode;

class Solution {
    public TreeNode insertIntoMaxTree(TreeNode root, int val) {

        if (val > root.val) {
            TreeNode node = new TreeNode(val);
            node.left = root;
            return node;
        }

        dfs(root, val);
        return root;
    }

    private void dfs(TreeNode root, int val) {

        if (root.right != null && root.right.val < val) {
            root.right = new TreeNode(val, root.right, null);
        } else if (root.right == null) {
            root.right = new TreeNode(val);
        } else {
            root = root.right;
            dfs(root, val);
        }
    }
}

 

总结

这道题是中等难度,重点是理解题目要求,如果有更好的题目描述、更高效更简洁的代码实现欢迎回复。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值