博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
[LeetCode] Find Largest Value in Each Tree Row 找树每行最大的结点值
阅读量:6439 次
发布时间:2019-06-23

本文共 1528 字,大约阅读时间需要 5 分钟。

 

You need to find the largest value in each row of a binary tree.

Example:

Input:           1         / \        3   2       / \   \        5   3   9 Output: [1, 3, 9]

 

这道题让我们找二叉树每行的最大的结点值,那么实际上最直接的方法就是用层序遍历,然后在每一层中找到最大值,加入结果res中即可,参见代码如下:

 

解法一:

class Solution {public:    vector
largestValues(TreeNode* root) { if (!root) return {}; vector
res; queue
q; q.push(root); while (!q.empty()) { int n = q.size(), mx = INT_MIN; for (int i = 0; i < n; ++i) { TreeNode *t = q.front(); q.pop(); mx = max(mx, t->val); if (t->left) q.push(t->left); if (t->right) q.push(t->right); } res.push_back(mx); } return res; }};

 

如果我们想用迭代的方法来解,可以用先序遍历,这样的话就需要维护一个深度变量depth,来记录当前结点的深度,如果当前深度大于结果res的长度,说明这个新一层,我们将当前结点值加入结果res中,如果不大于res的长度的话,我们用当前结点值和结果res中对应深度的那个结点值相比较,取较大值赋给结果res中的对应深度位置,参见代码如下:

 

解法二:

class Solution {public:    vector
largestValues(TreeNode* root) { if (!root) return {}; vector
res; helper(root, 1, res); return res; } void helper(TreeNode* root, int depth, vector
& res) { if (depth > res.size()) res.push_back(root->val); else res[depth - 1] = max(res[depth - 1], root->val); if (root->left) helper(root->left, depth + 1, res); if (root->right) helper(root->right, depth + 1, res); }};

 

参考资料:

 

转载地址:http://qgzwo.baihongyu.com/

你可能感兴趣的文章
NIO - Selector源码分析
查看>>
×××S 2012 聚合函数 -- 介绍
查看>>
linux 防火墙 iptables 允许 某个 某段 IP访问 某个端口
查看>>
Open*** 安装脚本
查看>>
计算任意两个数之间1出现的次数的思维过程
查看>>
Error No matching provisioning profiles found
查看>>
windows 2008创建群集“xxx”时出错。由于超时时间已过,该操作返回
查看>>
WinForm 入口Main方法
查看>>
SQL基础语句
查看>>
java算法2_二分查找法
查看>>
MySQL 5.6 & 5.7最优配置文件模板
查看>>
ffmpeg 怎么用
查看>>
JSP中 request.getRealPath("/xx/yy") 方法提示已经过时的替代方法
查看>>
实战 MDT 2012(六)---基于MAC地址的部署
查看>>
下载视频的一种简便方法
查看>>
C#中所有对象共同的基类是System.Object
查看>>
[鸟哥linux视频教程整理]04_02_Linux 权限及权限管理
查看>>
Linux运维工程师面试题第三套
查看>>
商务智能的需求驱动
查看>>
ThinkPad预装win8系统机型安装win7系统的操作指导
查看>>