开始做题了,认真刷题,再次祈祷上帝,求上帝帮助我不在题海中沉沦下去,而是,提前预备好自己,在机会来临的时候,抓住机会,成功上岸!
一、最大二叉树
leetcode题目链接:654.最大二叉树
题目描述:
给定一个不含重复元素的整数数组。一个以此数组构建的最大二叉树定义如下:
- 二叉树的根是数组中的最大元素。
- 左子树是通过数组中最大值左边部分构造出的最大二叉树。
- 右子树是通过数组中最大值右边部分构造出的最大二叉树。
通过给定的数组构建最大二叉树,并且输出这个树的根节点。
采用前序遍历方式,中、左、右。
来看一下JS代码:
/**
* Definition for a binary tree node.
* function TreeNode(val, left, right) {
* this.val = (val===undefined ? 0 : val)
* this.left = (left===undefined ? null : left)
* this.right = (right===undefined ? null : right)
* }
*/
/**
* @param {number[]} nums
* @return {TreeNode}
*/
// 采用前序遍历,中、左、右的遍历方式
var constructMaximumBinaryTree = function(nums) {
if (nums?.length == 1) {
return new TreeNode(nums.pop());
}
let maxValue = 0;
let index = 0;
for (let i = 0;i < nums.length;i++) {
if (nums[i] > maxValue) {
maxValue = nums[i];
index = i;
}
}
// 构造中间节点
let node = new TreeNode(maxValue)
if (index > 0) {
//左闭右开,不包含index;
let leftArr = nums.slice(0, index);
// 构造左子树