leetcode 654. 最大二叉树

xiaoxiao2021-02-28  17

题目描述:

 


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

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

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

Example 1:

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

注意:

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

代码:

/** * Definition for a binary tree node. * struct TreeNode { * int val; * TreeNode *left; * TreeNode *right; * TreeNode(int x) : val(x), left(NULL), right(NULL) {} * }; */ class Solution { public: TreeNode* constructMaximumBinaryTree(vector<int>& nums) { if(nums.size()==0)return NULL; else if(nums.size()==1){ TreeNode * node=new TreeNode(nums[0]); return node; } else{ int max=0; for(int i=0;i<nums.size();i++){ if(nums[i]>nums[max]) max=i; } vector<int> left_num,right_num; for(int i=0;i<max;i++){ left_num.push_back(nums[i]); } for(int j=max+1;j<nums.size();j++){ right_num.push_back(nums[j]); } TreeNode * node=new TreeNode(nums[max]); node->left=constructMaximumBinaryTree(left_num); node->right=constructMaximumBinaryTree(right_num); return node; } } };
转载请注明原文地址: https://www.6miu.com/read-2400248.html

最新回复(0)