Leetcode---654. 最大二叉树

给定一个不含重复元素的整数数组。一个以此数组构建的最大二叉树定义如下:

  1. 二叉树的根是数组中的最大元素。
  2. 左子树是通过数组中最大值左边部分构造出的最大二叉树。
  3. 右子树是通过数组中最大值右边部分构造出的最大二叉树。

通过给定的数组构建最大二叉树,并且输出这个树的根节点。

Example 1:

输入: [3,2,1,6,0,5]
输入: 返回下面这棵树的根节点:

      6
    /   \
   3     5
    \    / 
     2  0   
       \
        1

注意:

给定的数组的大小在 [1, 1000] 之间。

------------------------------------------------------------------------------------------------------------------------------------------------------------------------

这道题的解法和由中序和前序构建二叉树的那道题有点类似,函数里用了st,ed两个变量来记录区间的端点。

思路不难,直接代码吧。

AC:

class Solution {
public:
    TreeNode* fun(vector<int>& nums,int st,int ed)
    {
        if(st>ed)          //如果st<ed,那么也就是说这个区间不存在,就说明这个指针为NULL。
            return NULL;
            int max=nums[st];
            int k=st;
        for (int i=st;i<=ed;i++)
        {
            if (max<nums[i])
            {
                max=nums[i];
                k=i;
            }
        }
        TreeNode* r=new TreeNode(max);       
        r->left=fun(nums,st,k-1);
        r->right=fun(nums,k+1,ed);
        return r; 
    }
    TreeNode* constructMaximumBinaryTree(vector<int>& nums) {
        if (nums.size()==0)
            return NULL;
         return fun(nums,0,nums.size()-1);
    }
};

   今天写的多文档编辑器让我完成的挺好的,今天还行吧,,,,,,,,,,,,,

扫描二维码关注公众号,回复: 3990715 查看本文章

猜你喜欢

转载自blog.csdn.net/weixin_41514525/article/details/83004650