最大二叉树
这题其实用递归很简单,重点是单调栈的解法~
信息
给定一个不含重复元素的整数数组。一个以此数组构建的最大二叉树定义如下:
二叉树的根是数组中的最大元素。
左子树是通过数组中最大值左边部分构造出的最大二叉树。
右子树是通过数组中最大值右边部分构造出的最大二叉树。
通过给定的数组构建最大二叉树,并且输出这个树的根节点。
示例:
输入:
|
|
输出:返回下面这棵树的根节点:
|
|
方法
思路一:递归,思路不难
- 找到当前数组的最值,构建节点
- 节点的左子结点–>找到当前数组(上一个节点的左侧)的最值,构建节点;
- 节点的右子结点–>找到当前数组(上一个节点的右侧)的最值,构建节点。
思路二:单调栈,单调栈维护的是严格的单调数组,在本题中,通过递增栈(出栈顺序)构建树
|
|
方法一代码如下:
|
|
方法二代码如下:
|
|