LeetCode 515.在每个树中找最大值 C++

该博客介绍了如何使用广度优先搜索(BFS)策略来解决给定一棵二叉树中找出每层最大值的问题。通过创建一个队列并逐层遍历二叉树,每层的最大值被记录并存入结果数组中。最后返回这个数组,即得到每层的最大值。提供的解题代码展示了如何实现这个算法。
摘要由CSDN通过智能技术生成

题目描述

给定一棵二叉树的根节点 root ,请找出该二叉树中每一层的最大值。

示例1:

输入: root = [1,3,2,5,3,null,9]
输出: [1,3,9]
解释:
          1
         / \
        3   2
       / \   \  
      5   3   9 

示例2:

输入: root = [1,2,3]
输出: [1,3]
解释:
          1
         / \
        2   3

示例3:

输入: root = [1]
输出: [1]

示例4:

输入: root = [1,null,2]
输出: [1,2]
解释:      
           1 
            \
             2     

示例5:

输入: root = []
输出: []
 

提示:

二叉树的节点个数的范围是 [0,104]
-231 <= Node.val <= 231 - 1

来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/find-largest-value-in-each-tree-row

解题思路

BFS套路去层次遍历该树。
在每一层的遍历中找出最大的树,并且把它存入数组。
最后返回数组即可。

代码

/**
 * 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:
    void bfs(TreeNode* root, vector<int> &v){//bfs模板套路
        if(root==NULL){//如果根结点为空,直接返回
            return ;
        }
        queue<TreeNode* >q;//队列q用于存放结点数据
        q.push(root);//首先将根节点入队
        while(!q.empty()){//当队列非空时
            int sz=q.size();//每一层的结点个数
            int Max=q.front()->val;//在遍历该层之前,设定一个Max最大值,用于在当前一层遍历结束后返回,初始值设为该层的第一个元素
            while(sz>0){//遍历该层
                TreeNode* p=q.front();//
                q.pop();
                Max=max(Max, p->val);//在当前层中找到最大的结点
                if(p->left!=NULL){
                    q.push(p->left);
                }
                if(p->right!=NULL){
                    q.push(p->right);
                }
                sz--;
            }
            v.push_back(Max);//当前层遍历结束之后,当前层的最大值push到我们的结果数组中
        }
    }
    vector<int> largestValues(TreeNode* root) {
        vector<int> res;//定义的结果数组
        bfs(root,res);//bfs扫一遍树,并且把我们要的结果存入res数组中
        return res;//返回res数组
    }
};

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值