题目描述
给定一个不含重复元素的整数数组。一个以此数组构建的最大二叉树定义如下:
- 二叉树的根是数组中的最大元素。
- 左子树是通过数组中最大值左边部分构造出的最大二叉树。
- 右子树是通过数组中最大值右边部分构造出的最大二叉树。
- 通过给定的数组构建最大二叉树,并且输出这个树的根节点。
示例 :
1 | 输入:[3,2,1,6,0,5] |
题解
先序遍历+递归
这道题经过在大脑中模拟一下二叉树的构建过程可知, 自顶向下更加直观, 所以使用先序遍历的思想. 将左侧数组作为左子树, 右侧数组作为右子树, 这明显递归的过程更加直观
递归思路:
- 终止条件: 当数组搜索的左右边界相等时, 递归终止
l = r
- 递归过程:
- 查找出当前数组中的最大值索引, 然后以最大值创建树节点,
- 调用
construct(nums, l, max_i)
创建根节点的左孩子。递归执行此操作,创建根节点的整个左子树 - 类似的,调用
construct(nums, max_i + 1, r)
创建根节点的右子树
- 返回值: 返回创建的
root
1 | public class lc654 { |