本文共 1447 字,大约阅读时间需要 4 分钟。
给定一个不含重复元素的整数数组 nums 。一个以此数组直接递归构建的 最大二叉树 定义如下:
二叉树的根是数组 nums 中的最大元素。
左子树是通过数组中 最大值左边部分 递归构造出的最大二叉树。 右子树是通过数组中 最大值右边部分 递归构造出的最大二叉树。 返回有给定数组 nums 构建的 最大二叉树 。 示例:来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/maximum-binary-tree 著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。/** * Definition for a binary tree node. * struct TreeNode { * int val; * TreeNode *left; * TreeNode *right; * TreeNode() : val(0), left(nullptr), right(nullptr) {} * TreeNode(int x) : val(x), left(nullptr), right(nullptr) {} * TreeNode(int x, TreeNode *left, TreeNode *right) : val(x), left(left), right(right) {} * }; */ /* 思路: 递归停止条件:构树数组为空 返回什么: 构造的二叉树的根节点: 本级递归干什么: 求最大值,分别构造左右子树 */class Solution { public: TreeNode* constructMaximumBinaryTree(vector & nums) { if(nums.size()==0) return NULL; return buildtree(nums,0,nums.size()-1); } TreeNode* buildtree(vector & nums,int l, int r ){ if(l>r) return NULL; int index=l; int max=nums[l]; for(int i=l+1;i<=r;i++){ if(nums[i]>=max){ index=i; max=nums[i]; } } TreeNode* root1=new TreeNode(); root1->left=buildtree(nums,l,index-1); root1->right=buildtree(nums,index+1,r); root1->val=max; return root1; }};
注意以后建立树或者链表的新节点,要这样子
TreeNode* root1=new TreeNode(); 直接 TreeNode* root1;就一直出错