首页 > 其他分享 >653.最大二叉树

653.最大二叉树

时间:2023-05-26 21:12:13浏览次数:32  
标签:node index 最大 nums 最大值 二叉树 数组 653

给定一个不重复的整数数组 nums 。 最大二叉树 可以用下面的算法从 nums 递归地构建:

创建一个根节点,其值为 nums 中的最大值。
递归地在最大值 左边 的 子数组前缀上 构建左子树。
递归地在最大值 右边 的 子数组后缀上 构建右子树。
返回 nums 构建的 最大二叉树

 

在分割数组的时候和中后序构造二叉树有所不同

该题是找最大值,需要遍历数组,因此需要重新定义变量

而上一题是找符合要求的值,for循环中不需要重新定义变量

class Solution {
public:
    TreeNode* constructMaximumBinaryTree(vector<int>& nums) {
        TreeNode* node= new TreeNode(0);
        if(nums.size()==1)//终止条件
        {
            node->val=nums[0];
            return node;
        }

        int maxvalue=0;
        int index=0;
        for(int i=0;i<nums.size();i++)// 找到数组中最大的值和对应的下标
        {
            if(nums[i]>maxvalue)
            {
                maxvalue=nums[i];
                index=i;
            }
        }

        node->val=maxvalue;

        if(index>0)//左子树
        {   
            vector<int> nec(nums.begin(),nums.begin()+index); //新数组取到原数组最大值的前一位
            node->left=constructMaximumBinaryTree(nec);
        }

        if(index< (nums.size()-1))//右子树
        {
            vector<int> nec(nums.begin()+ index + 1,nums.end());
            node->right=constructMaximumBinaryTree(nec);
        }

        return node;

    }
};

 

标签:node,index,最大,nums,最大值,二叉树,数组,653
From: https://www.cnblogs.com/gaishuobulao/p/17435807.html

相关文章

  • 如何调整Gitlab-Runner最大并发数?
    概述:我们在使用gitlab-runner做cicd时,如果安装之后没有配置gitlab-runner的最大并发数,在使用时候可能会碰到job的警告(job日志超过字节限制):job‘slogexceededlimitof4194304bytes*****查看默认最大并发数concurrent=10cat/etc/gitlab-runner/config.toml解决办法......
  • 提高linux对最大进程数和最大打开文件描述符数的限制
    打开/etc/security/limits.conf文件在下面加入如下两行,其中wacos是用户名,*可以代表所有用户wacos     -   nproc     20000wacos     -   nofile     65536noproc代表最大进程数nofile代表最大文件打开数然后在命令行输......
  • 4.1 最大公约数
    第一部曲:两种思路一种枚举一种利用辗转相除法,枚举可以选择从小到大也可以选择从大到小。第二部曲: 第三部曲:if(m<n)swap(m,n); k=m%n; while(k!=0) { m=n; n=k; k=m%n; } cout<<n;第四部曲:#include<iostream>//从小到大枚举#include<algorithm>usingnamespacestd;int......
  • 求一个数所有因子的集合的子集中满足所有数均互质的最大子集
    题意:很明显了,就是把数n的所有因子求出来,在里面挑选一些数,使这些数之间均互质,求这些的最大个数。结论:先讲结论:最大个数为数n的质因数个数加1思路:我们已知一个数的质因数,就可以把这个数表示成若干质因数的乘积,例如:12=2*2*3;其中2,3是12的质因数,表达式中2的个数是2,3的......
  • 代码随想录算法训练营第十五天|102. 二叉树的层序遍历、226. 翻转二叉树、101. 对称二
    【参考链接】102.二叉树的层序遍历 【注意】1.队列先进先出,符合一层一层遍历的逻辑,而用栈先进后出适合模拟深度优先遍历也就是递归的逻辑。而这种层序遍历方式就是图论中的广度优先遍历,只不过我们应用在二叉树上。2.遍历的时候要记录队列的大小。就可以知道哪些元素是第几层......
  • java 获取数组,最大值,最小值
    以下实例演示了如何通过Collections类的Collections.max()和Collections.min()方法来查找数组中的最大和最小值:importjava.util.Arrays;importjava.util.Collections;publicclassImoocStudent{publicstaticvoidmain(Stringargs[]){Integer[]......
  • 力扣239(Java)- 滑动窗口最大值(困难)
    题目:给你一个整数数组nums,有一个大小为 k 的滑动窗口从数组的最左侧移动到数组的最右侧。你只可以看到在滑动窗口内的k 个数字。滑动窗口每次只向右移动一位。返回滑动窗口中的最大值。示例1:输入:nums=[1,3,-1,-3,5,3,6,7],k=3输出:[3,3,5,5,6,7]解释:滑动窗口的位......
  • 【剑指offer】-把二叉树打印成多行-43/67
    1.题目描述从上到下按层打印二叉树,同一层结点从左至右输出。每一层输出一行。2.题目分析非常经典的一道二叉树的题目,做这道题之前需要掌握二叉树的思想和BFS(广度优先搜索、队列思想)我们可以回顾一下最基本的层次遍历,我们是用一个队列来进行存储初始root结点,然后依次放入root的......
  • 【力扣每日一题】144. 二叉树的前序遍历
    1.题目描述2.题目解析非常典型的一道二叉树题目思路一:递归求解思路二:迭代求解3.题目代码3.1递归**publicIList<int>PreorderTraversal(TreeNoderoot){List<int>list=newList<int>();Tree(root,list);returnlist;......
  • LeetCode 222. 完全二叉树的节点个数
    classSolution{public:intcountNodes(TreeNode*root){if(!root)return0;autol=root->left,r=root->right;intx=1,y=1;//记录左右两边层数while(l)l=l->left,x++;while(r)r=r->right,y++;......