04最大二叉树

04最大二叉树

题目

在这里插入图片描述
在这里插入图片描述题目即根节点为数组中的最大值,数组最大值的左边为根结点的左子树,数组最大值的右边为根结点的右子树,重复此操作每个结点都是这样

我的思路

如果数组长度为空,则无数据,根节点为空,否则的话找数组中的最大值为根结点,再获取左右两个数组,调用子函数来获取左右结点,重复此操作,但是会出现大段重复代码,其实可以不用使用子函数的,由于函数最终都为将结点return出去,根结点也一样,就是第一个被return出去的结点,所以代码一样,无需使用子函数

var constructMaximumBinaryTree = function(nums) {
            if (nums.length === 0) {
            return null
        } else {
            let max = Math.max(...nums);
            let index = nums.indexOf(max);
            let leftArray = [];
            let rightArray = [];
            let root= null;
            for (let i = 0 ; i < index; i++) {
                leftArray.push(nums[i]);
            }
            for (let i = index + 1; i < nums.length;i ++) {
                rightArray.push(nums[i]);
            }
            console.log('最大值下标',index)
            root = new TreeNode(max);
            root.left =  constructMaximumBinaryTreeNode(root,leftArray);
            root.right = constructMaximumBinaryTreeNode(root,rightArray);
            return root

        }var constructMaximumBinaryTreeNode = function (node,array) {
        if (array.length === 0 ) {
            return null;
        } else {
            let max = Math.max(...array);
            let index = array.indexOf(max);
            let leftArray = [];
            let rightArray = [];
            let node = null;
            for (let i = 0 ; i < index; i++) {
                leftArray.push(array[i]);
            }
            for (let i = index + 1; i < array.length;i ++) {
                rightArray.push(array[i]);
            }
            console.log('最大值下标',index)
            node = new TreeNode(max);
            node.left = constructMaximumBinaryTreeNode(node,leftArray);
            node.right = constructMaximumBinaryTreeNode(node,rightArray);
            return node
        }
    }

正确思路

var constructMaximumBinaryTree = function(nums) {
        if (nums.length === 0) {
            return null;
        } else {
            let max = Math.max(...nums);
            let index = nums.indexOf(max);
            console.log(max)
            let leftArray = [];
            let rightArray = [];
            let root = null
            for (let i = 0 ; i < index; i++) {
                leftArray.push(nums[i]);
            }
            for (let i = index + 1; i < nums.length;i ++) {
                rightArray.push(nums[i]);
            }
            console.log('最大值下标',index)
            root = new TreeNode(max);
            root.left =  constructMaximumBinaryTree(leftArray);
            root.right = constructMaximumBinaryTree(rightArray);
            return root

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值