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
}
};