栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

654. 最大二叉树

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

654. 最大二叉树

力扣打卡:654. 最大二叉树

解题思路

首先在整段中寻找一个最大值,找到之后构建一个节点,接着从左右两端中重复同样的动作

从思路上得到,需要构建一个辅助函数,能够从一个数组(left,right)中找到最大值,然后递归的调用构建左边一段,右边一段

首先是:
[321] 6 [05]
然后:
----6 [05]
---3 [21] 此时3的左侧没有了,也就是没有左孩子
----2 [1] 此时2的左侧没有了,也就是没有左孩子
-----1    此时只剩下一个元素,没有左孩子右孩子

----6
-----[0]5 此时5的右侧没有了,也就是没有右孩子
-----0     此时只剩下了一个元素,也就是没有左孩子右孩子

代码
class Solution {
    public TreeNode constructMaximumBinaryTree(int[] nums) {
        TreeNode root = build(nums,0,nums.length);
        return root;
    }
    // 通过一个辅助函数去构建节点,每一段寻找最大值构建,然后分开字段重新构建
    public TreeNode build(int[] nums, int l, int r){  
        if(l >= r) return null;

        int max = Integer.MIN_VALUE;
        int point = 0;
        for(int i=l; imax){point = i; max=nums[i];}
        }
        TreeNode root = new TreeNode(max);  // 构建新的节点
        // 递归调用构建左右子树节点
        root.left = build(nums,l,point);   
        root.right = build(nums,point+1,r);

        return root;
    }
}

记住框架,方向就对了,具体的细节可以商定

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/301212.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号