力扣-654.最大二叉树-javaScript实现

力扣题目链接 

        这道题显然也是构造二叉树的题目 一般构造二叉树的题目都是按照前序遍历来算的 因为前序遍历(中左右) 要先构造出根节点才能继续根据根节点往下构造其左右子树。

var constructMaximumBinaryTree = function(nums) {
    // 创建一个函数 用来生成二叉树(包括左右子树) 传递的参数为arr数组(可以是子数组 或者最大的数组) left right 分别表示 数组的左右下标
    let createTree = (arr,left,right)=>{
        // 判断终止条件
        if(left > right)return null;
        let maxVal = -1; // 假设数组中最大的值是-1
        let maxIndex = -1; // 假设数组中最大值的下标为-1
        for(let i = left;i <= right; i++){
            // 循环遍历数组 找出其中最大的值
            if(arr[i] > maxVal){
                maxVal = arr[i];
                maxIndex = i;
            }
        }
        // 构造出一棵树 这棵树的根节点为数组中最大值 即maxVal
        let root = new TreeNode(maxVal);  //中
        // 递归的单层逻辑
        root.left = createTree(arr,left,maxIndex-1)  // 二叉树子树的左右区间的范围 我这里是左闭右闭
        root.right = createTree(arr,maxIndex + 1,right);
        return root;
    }
    // 将需要构造的数组传进createTree中 先找出根节点
    let root = createTree(nums,0,nums.length-1);
    return root
};

 

总结

        首先要清楚的知道构造二叉树的顺序(一般都是前序遍历) 还有就是注意二叉树左右子树的取值范围,一定要遵循一致,要么都是左闭右闭,要么都是左闭右开,注重要一致。还有就是再次再次强调递归的三要素。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值