题目:给定一个不含重复元素的整数数组。一个以此数组构建的最大二叉树定义如下:
二叉树的根是数组中的最大元素。
左子树是通过数组中最大值左边部分构造出的最大二叉树。
右子树是通过数组中最大值右边部分构造出的最大二叉树。
通过给定的数组构建最大二叉树,并且输出这个树的根节点。
Example 1:
输入: [3,2,1,6,0,5]
输入: 返回下面这棵树的根节点:
6
/ 3 5
\ /
2 0
1
分析:(1)通过审题可知通过先序创建二叉树进行创建,即创建根节点,左子树,右子数。 所以选择递归的方法进行创建。
visit(T);
createleftTree(T->left);
creatterightTree(T->right);
(2)找数组中的最大值,类似于二分查找, 用三个游标low,high,temp分别来跟踪所要查找的数组中的低位、高位、和最大值的位置。
temp 根节点
[low , temp-1]左子树
[temp+1, high]右子数
(3)根据题意,输出时需要将二叉树按层输出,即按层遍历,使用队列实现,队列的特性FIFO 。(1)根节点入队列-》(2)根节点出队列并输出-》(3)左子树入队列-》(4)右子数入队列-》(3)
定义二叉树结点:
typedef struct TreeNode{
int val;
struct TreeNode *left;