前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >专栏 >【leetcode刷题】T139-在每个树行中找最大值

【leetcode刷题】T139-在每个树行中找最大值

作者头像
木又AI帮
发布于 2019-08-12 07:01:44
发布于 2019-08-12 07:01:44
98500
代码可运行
举报
文章被收录于专栏:木又AI帮木又AI帮
运行总次数:0
代码可运行

木又连续日更第95天(95/100)


木又的第139篇leetcode解题报告

二叉树类型第29篇解题报告

leetcode第515题:在每个树行中找最大值

https://leetcode-cn.com/problems/find-largest-value-in-each-tree-row/


【题目】

您需要在二叉树的每一行中找到最大的值。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
示例:
输入: 
          1
         / \
        3   2
       / \   \  
      5   3   9 
输出: [1, 3, 9]

【思路】

本题和【T138-找树左下角的值】较为类似,同样有两种解法:一是层次遍历,得到每一层元素,再找到每一层的最大值;二是中序遍历(前序遍历和后序遍历也可以),存储节点的值,并标记其层数,当某一层某个节点的值大于存储的值时,进行替换。

昨天分享的是第二种解法,今天分享第一种解法。

【代码】

python版本

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
# Definition for a binary tree node.
# class TreeNode(object):
#     def __init__(self, x):
#         self.val = x
#         self.left = None
#         self.right = None

class Solution(object):
    def largestValues(self, root):
        """
        :type root: TreeNode
        :rtype: List[int]
        """
        if not root:
            return []
        # 层次遍历,找到最大值
        p = [root]
        q = []
        res = []
        val = root.val
        while p or q:
            if not p:
                p = copy.copy(q)
                q = []
                res.append(val)
                val = p[0].val
            cur = p.pop(0)
            val = max(val, cur.val)
            # 加入下一层节点
            if cur.left:
                q.append(cur.left)
            if cur.right:
                q.append(cur.right)
        # 最后一次循环,p、q皆为空
        res.append(val)
        return res

C++版本

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
/**
 * 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:
    vector<int> largestValues(TreeNode* root) {
        vector<int> res;
        if(!root)
            return res;
        queue<TreeNode*> p;
        queue<TreeNode*> q;
        p.push(root);
        int val = root->val;
        TreeNode* cur = NULL;
        while(!p.empty() || !q.empty()){
            if(p.empty()){
                while(!q.empty()){
                    p.push(q.front());
                    q.pop();
                }
                res.push_back(val);
                // 新的一层,改变初始值
                val = p.front()->val;
            }
            cur = p.front();
            p.pop();
            val = max(val, cur->val);
            if(cur->left)
                q.push(cur->left);
            if(cur->right)
                q.push(cur->right);
        }
        // 最后一次遍历,p、q都为空,未能添加最后一层的最大元素
        res.push_back(val);
        return res;
    }
};
本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2019-08-10,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 木又AI帮 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
【leetcode刷题】T146-二叉树的层平均值
https://leetcode-cn.com/problems/average-of-levels-in-binary-tree
木又AI帮
2019/08/22
4030
【leetcode刷题】T128-二叉树的右视图
https://leetcode-cn.com/problems/binary-tree-right-side-view/
木又AI帮
2019/07/30
4800
【leetcode刷题】T149- N叉树的层序遍历
https://leetcode-cn.com/problems/validate-binary-search-tree/
木又AI帮
2019/08/28
3850
DFS基础问题-LeetCode 98、101(二叉树中序遍历,层次遍历)
假设一个二叉搜索树具有如下特征: 节点的左子树只包含小于当前节点的数。 节点的右子树只包含大于当前节点的数。 所有左子树和右子树自身必须也是二叉搜索树。
算法工程师之路
2019/09/17
8010
【leetcode刷题】T115-二叉树的层次遍历
https://leetcode-cn.com/problems/binary-tree-level-order-traversal/
木又AI帮
2019/07/17
4190
【leetcode刷题】T119-二叉树的层次遍历 II
https://leetcode-cn.com/problems/binary-tree-level-order-traversal-ii/
木又AI帮
2019/07/22
2850
【leetcode刷题】T116-二叉树的锯齿形层次遍历
https://leetcode-cn.com/problems/binary-tree-zigzag-level-order-traversal/
木又AI帮
2019/07/17
3550
leetcode 每日一题:103.二叉树的锯齿形层序遍历
leetcode 每日一题:103.二叉树的锯齿形层序遍历:https://leetcode-cn.com/problems/binary-tree-zigzag-level-order-traversal/
用户7685359
2020/12/23
5970
leetcode-树 tree
使用递归,由叶子结点到根结点,每个结点都返回自己所能贡献的最大直径。设一个全局变量用来在过程中更新diameter。
孔西皮
2021/03/04
4860
leetcode-树 tree
golang刷leetcode 二叉树的遍历
总结:由根节点在前中后决定前中后序,三种遍历代码逻辑一样,只是打印位置不一样,非递归方式后续遍历需要两个栈后进先出打印
golangLeetcode
2022/08/02
1640
LeetCode 314. 二叉树的垂直遍历(BFS/DFS)
文章目录 1. 题目 2. 解题 2.1 DFS 2.2 BFS 1. 题目 给定一个二叉树,返回其结点 垂直方向(从上到下,逐列)遍历的值。 如果两个结点在同一行和列,那么顺序则为 从左到右。 示例 1: 输入: [3,9,20,null,null,15,7] 3 /\ / \ 9 20 /\ / \ 15 7 输出: [ [9], [3,15], [20], [7] ] 示例 2: 输入: [3,9,8,4,0,1,7]
Michael阿明
2021/02/19
9480
阿里巴巴的算法面试题JAVA,python,go,rust ,js,C++,Swift,Kotlin,Scala解法大全
算法思路相同,都是使用dummy节点和cur指针,两两交换链表节点,并返回dummy.next作为结果。
疯狂的KK
2023/05/16
9920
阿里巴巴的算法面试题JAVA,python,go,rust ,js,C++,Swift,Kotlin,Scala解法大全
​LeetCode刷题实战515:在每个树行中找最大值
算法的重要性,我就不多说了吧,想去大厂,就必须要经过基础知识和业务逻辑面试+算法面试。所以,为了提高大家的算法能力,这个公众号后续每天带大家做一道算法题,题目就从LeetCode上面选 !
程序员小猿
2022/03/03
4380
​LeetCode刷题实战515:在每个树行中找最大值
几乎刷完了力扣所有的树题,我发现了这些东西。。。
先上下本文的提纲,这个是我用 mindmap 画的一个脑图,之后我会继续完善,将其他专题逐步完善起来。
Nealyang
2020/12/03
3.3K0
几乎刷完了力扣所有的树题,我发现了这些东西。。。
【算法篇】三道题理解算法思想——认识BFS
https://leetcode.cn/problems/n-ary-tree-level-order-traversal/description/
小皮侠
2024/04/08
1510
【算法篇】三道题理解算法思想——认识BFS
LeetCode刷题系列(3)
方法一:c++的next_permutation()封装了全排列的实现,注意使用前先排序。
Cyril-KI
2022/09/19
1680
LeetCode刷题系列(3)
​LeetCode刷题实战102:二叉树的层序遍历
算法的重要性,我就不多说了吧,想去大厂,就必须要经过基础知识和业务逻辑面试+算法面试。所以,为了提高大家的算法能力,这个公众号后续每天带大家做一道算法题,题目就从LeetCode上面选 !
程序员小猿
2021/01/20
2920
​LeetCode刷题实战102:二叉树的层序遍历
LeetCode 513. 找树左下角的值
https://leetcode-cn.com/problems/find-bottom-left-tree-value/
freesan44
2021/10/04
1780
LeetCode 513. 找树左下角的值
【leetcode刷题】T138-找树左下角的值
https://leetcode-cn.com/problems/find-bottom-left-tree-value/
木又AI帮
2019/08/12
4590
golang刷leetcode 二叉树(5)右视图
给定一棵二叉树,想象自己站在它的右侧,按照从顶部到底部的顺序,返回从右侧所能看到的节点值。
golangLeetcode
2022/08/02
2080
相关推荐
【leetcode刷题】T146-二叉树的层平均值
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验