题目简介:
给定一个不重复的整数数组 nums
。 最大二叉树 可以用下面的算法从 nums
递归地构建:
- 创建一个根节点,其值为
nums
中的最大值。 - 递归地在最大值 左边 的 子数组前缀上 构建左子树。
- 递归地在最大值 右边 的 子数组后缀上 构建右子树。
返回 nums
构建的 最大二叉树 。
示例 1:
1 | 输入:nums = [3,2,1,6,0,5] |
提示:
1 <= nums.length <= 1000
0 <= nums[i] <= 1000
nums
中的所有整数 互不相同
思路:
方法一:
递归,每次将数组中的最大值找出来即可。
时间复杂度:O(n^2)
代码如下:
1 | /** |
方法二:
利用栈,在遍历元素时,构造每一个元素的最大二叉树。
若遇到的元素比当前栈顶元素小,那么就作为该栈顶元素的右节点并入栈。
若遇到的元素比当前栈顶元素大,则将栈顶元素不断出栈,并且这些元素为当前元素的左节点(因为位置上是在当前元素的左边)。
最后返回栈底元素即可(根节点,最大值)。
时间复杂度:O(n)
代码如下:
1 | /** |