给定一个没有重复数的数组。建立一棵最大树
来源:互联网 发布:发票作废 上传数据 编辑:程序博客网 时间:2024/05/17 23:52
思路:先找到最大的数。建立根节点。在递归遍历最大节点的左半部分和右半部分。构造树
代码1 :
TreeNode* constructMaximumBinaryTree(vector<int>& nums) { if(nums.size()==0) return NULL; return createTree(nums,0,nums.size()-1); } TreeNode* createTree(vector<int>& nums,int start,int end){ if(start>end){ return NULL; } int maxN=nums[start]; int i=start; int j=end; int index=start; while(i<=j){ if(nums[i]>maxN){ maxN=nums[i]; index=i; } i++; } TreeNode* root=new TreeNode(maxN); root->left=createTree(nums,start,index-1); root->right=createTree(nums,index+1,end); return root; }
思路: 遍历数组。对每个数都新建一个节点。然后与前面的节点对比,如果大于前面的节点。则前面的节点是其左子树。否则新节点是右子树。
代码2 : 非递归
TreeNode* constructMaximumBinaryTree(vector<int>& nums) { vector<TreeNode*> vec; int n=nums.size(); for(int i=0;i<n;i++){ TreeNode* p=new TreeNode(nums[i]); while(vec.size() && vec.back()->val < nums[i]){ p->left=vec.back(); vec.pop_back(); } if(vec.size()){ vec.back()->right=p; } vec.push_back(p); } return vec.front(); }
阅读全文
0 0
- 给定一个没有重复数的数组。建立一棵最大树
- 给定一个没有重复的已排序整数数组,返回其范围的摘要。
- 给定一个数输出它重复n遍的数
- java__给定一个升序排列的数组,去掉重复的数,并输出新的数组的长度
- 用HashSet()实现重新建立一个没有重复数据的数组
- 给定一个数组,从中查找是否存在两个数的和等于一个给定的x
- 1. Two Sum 给定一个数组和一个数,输出两个和为给定数的数组元素的下标
- 整型数组处理算法(九)给定任意一个正整数,求比这个数大且最小的“不重复数”[2014百度笔试题]
- 整型数组处理算法(九)给定任意一个正整数,求比这个数大且最小的“不重复数”(性能优化)[2014百度笔试题]
- 没有大树的葱茏,就试着做一株小草吧
- 给定一个数,要求输出比它大的最小的非重复数
- 给定任意一个正整数,求比这个数大且最小的“不重复数”
- 给定任意一个正整数,求比这个数大且最小的“不重复数”
- 给定一个字符串,返回字符串中没有重复字符的最长子串的长度
- 给定一个子串,寻找没有重复字符的最长子串
- 在无重复数字的循环数组中查找给定数返回其下标
- 给定N是一个正整数,求比N大的最小“不重复数”,这里的不重复是指没有两个相等的相邻位,如1102中的11是相等的两个相邻位故不是不重复数,而12301是不重复数。
- 判断一个有序数组中是否有两个数的和等于给定的数
- 研究生手册(二)
- CodeForces 699C
- 开发一个井字游戏
- 面向对象开发公众号,php代码封装类,函数
- JQuery源码解析–extend篇
- 给定一个没有重复数的数组。建立一棵最大树
- pandas之get_dummies
- 资源帖
- VS2010中添加lib库引用
- Java
- 设计原则(二)
- 建议掌握的视频站seo优化教程
- CKG1156-Java Spring 技术栈构建前后台团购网站
- Keras-5 基于 ImageDataGenerator 的 Data Augmentation实现