LeetCode 987. 二叉树的垂序遍历(递归/循环)

1. 题目

给定二叉树,按垂序遍历返回其结点值。

对位于 (X, Y) 的每个结点而言,其左右子结点分别位于 (X-1, Y-1) 和 (X+1, Y-1)

把一条垂线从 X = -infinity 移动到 X = +infinity ,每当该垂线与结点接触时,我们按从上到下的顺序报告结点的值( Y 坐标递减)。

如果两个结点位置相同,则首报告的结点值较小

按 X 坐标顺序返回非空报告的列表。每个报告都有一个结点值列表。

示例 1:
在这里插入图片描述

输入:[3,9,20,null,null,15,7]
输出:[[9],[3,15],[20],[7]]
解释: 
在不丧失其普遍性的情况下,我们可以假设根结点位于 (0, 0):
然后,值为 9 的结点出现在 (-1, -1);
值为 315 的两个结点分别出现在 (0, 0)(0, -2);
值为 20 的结点出现在 (1, -1);
值为 7 的结点出现在 (2, -2)

示例 2:
在这里插入图片描述

输入:[1,2,3,4,5,6,7]
输出:[[4],[2],[1,5,6],[3],[7]]
解释:
根据给定的方案,值为 56 的两个结点出现在同一位置。
然而,在报告 "[1,5,6]" 中,结点值 5 排在前面,因为 5 小于 6。提示:
树的结点数介于 11000 之间。
每个结点值介于 01000 之间。

来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/vertical-order-traversal-of-a-binary-tree
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

2. 解题

  • map的key记录x坐标,value记录点的集合{val, 深度}
  • 对x一样的点集,按深度第一,值第二进行排序

2.1 递归

class Solution {	map<int, vector<vector<int>>> m;//x坐标,节点集合< <val, deep> >
public:vector<vector<int>> verticalTraversal(TreeNode* root) {//前序遍历 根左右if(!root)return {};dfs(root,0,0);vector<vector<int>> temp;vector<vector<int>> ans(m.size());int i = 0, j;for(auto it  = m.begin(); it != m.end(); ++it){temp = it->second;//点集合sort(temp.begin(), temp.end(),[&](auto a, auto b){if(a[1] == b[1])return a[0] < b[0];//深度一样,按值return a[1] < b[1];//深度小的在前});for(j = 0; j < temp.size(); ++j)ans[i].push_back(temp[j][0]);//数值写入答案i++;}return ans;}void dfs(TreeNode* root, int x, int deep){if(!root)return;m[x].push_back({root->val,deep});dfs(root->left, x-1, deep+1);dfs(root->right, x+1, deep+1);}
};

24 ms 16.3 MB

2.2 层序遍历

class Solution {
public:vector<vector<int>> verticalTraversal(TreeNode* root) {map<int, vector<vector<int>>> m;//x坐标,节点集合< <val, deep> >if(!root)return {};queue<pair<TreeNode*,pair<int,int>>> q;//节点及其坐标x,yq.push({root,{0,0}});pair<TreeNode*,pair<int,int>> tp;TreeNode* node;int x, y;while(!q.empty()){tp = q.front();q.pop();node = tp.first;x = tp.second.first;y = tp.second.second;m[x].push_back(vector<int> {node->val,y});if(node->left)q.push({node->left, {x-1,y+1}});if(node->right)q.push({node->right, {x+1,y+1}});}vector<vector<int>> temp;vector<vector<int>> ans(m.size());int i = 0, j;for(auto it  = m.begin(); it != m.end(); ++it){temp = it->second;sort(temp.begin(), temp.end(),[&](auto a, auto b){if(a[1] == b[1])return a[0] < b[0];//深度一样,按值return a[1] < b[1];//深度小的在前});for(j = 0; j < temp.size(); ++j)ans[i].push_back(temp[j][0]);//数值写入答案i++;}return ans;}
};

16 ms 13.2 MB

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/476365.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Workflow WF Reference Links for 2009-03-20

Workflow Reference Links: 1. Model Portability in BPMN 2.0 Bruce Silver又再一次对BPMN2.0规范中的“可导出交换”能力发表了个人观点。银狐999对这篇文章做了一个博文导读。 2. BPMN Semantics “Vague” or Just Hard to Code? 有关BPMN与BPEL的映射的争论在继续…

PAT乙类1005之继续(3n+1)猜想 (25 分)

一、 题目 卡拉兹(Callatz)猜想已经在1001中给出了描述。在这个题目里&#xff0c;情况稍微有些复杂。 当我们验证卡拉兹猜想的时候&#xff0c;为了避免重复计算&#xff0c;可以记录下递推过程中遇到的每一个数。例如对 n3 进行验证的时候&#xff0c;我们需要计算 3、5、8、…

python各种岗位薪资_python编程语言岗位薪资真不是盖的

Python 起薪和均资都高于 Java? C表示&#xff1a;吃瓜看戏!本文爬取了某直聘网站上Python和Java的招聘信息&#xff0c;比较了两个方向的发展前(钱)途 &#xff0c;为本科生的就业方向给一个小小的建议。01、爬取在招聘网站上直接以”本科生”和”Java”或”Python”作为筛选…

LeetCode 456. 132模式(逆序遍历+单调栈)

1. 题目 给定一个整数序列&#xff1a;a1, a2, …, an&#xff0c;一个132模式的子序列 ai, aj, ak 被定义为&#xff1a;当 i < j < k 时&#xff0c;ai < ak < aj。 设计一个算法&#xff0c;当给定有 n 个数字的序列时&#xff0c;验证这个序列中是否含有132模…

一道题目

题目如下&#xff1a;有一500米环形跑道&#xff0c;甲、乙在同一点同向同时起跑&#xff0c;已知甲的速度为60米/分钟&#xff0c;乙的速度为50米/分钟。且甲、乙跑的过程中每跑200米都要停下休息1分钟。问&#xff1a;若甲追上乙一圈需要多少时间&#xff1f;本人比较笨&…

PAT乙类1009 说反话 (20 分)

一、 题目 给定一句英语&#xff0c;要求你编写程序&#xff0c;将句中所有单词的顺序颠倒输出。输入格式&#xff1a; 测试输入包含一个测试用例&#xff0c;在一行内给出总长度不超过 80 的字符串。字符串由若干单词和若干空格组成&#xff0c;其中单词是由英文字母&#xf…

python 控件叠加_如何将图像应用于控件背景(叠加)

我想为小部件分配一个背景图像&#xff0c;比如QListWidget或QWidget。这个想法是&#xff1a;理想的情况下&#xff0c;背景图像会随着控件大小的变化而调整大小。有什么办法吗&#xff1f;在稍后编辑&#xff1a;下面是这个对话框的屏幕截图&#xff0c;其中包含Salvatore提出…

LeetCode 447. 回旋镖的数量(哈希map+组合数)

1. 题目 给定平面上 n 对不同的点&#xff0c;“回旋镖” 是由点表示的元组 (i, j, k) &#xff0c;其中 i 和 j 之间的距离和 i 和 k 之间的距离相等&#xff08;需要考虑元组的顺序&#xff09;。 找到所有回旋镖的数量。你可以假设 n 最大为 500&#xff0c;所有点的坐标在…

老赵看博客园首页

不知道从什么时候开始&#xff0c;争论一篇文章是不是应该上首页成为博客园的一种流行。无论从任何角度出发&#xff0c;一旦谈起“文章质量”必然会有朋友会牵扯到“首页”&#xff08;见《和谐社区&#xff0c;和谐技术》&#xff09;&#xff0c;然后动辄又抡起一句“你没有…

PAT乙类1010之1010 一元多项式求导

一、题目 设计函数求一元多项式的导数。&#xff08;注&#xff1a;X​n&#xff08;n为整数&#xff09;的一阶导数为nXn−1。&#xff09;输入格式: 以指数递降方式输入多项式非零项系数和指数&#xff08;绝对值均为不超过 1000 的整数&#xff09;。数字间以空格分隔。输出…

此beta版本目前不接受任何新测试员_ASO行业资讯|苹果官方App测试工具TestFlight

ASO行业资讯1数据周报12月8日起&#xff0c;用户在任何 Apple 平台下载 App 之前&#xff0c;App Store 都会先帮助其了解该 App 的隐私保护做法。在每款 App 的产品页面上&#xff0c;用户能了解到该 App 可能收集的某些数据类型&#xff0c;以及该数据是否会关联到他们或对其…

c#执行存储过程的简单实例

/*登陆验证存储过程*/if exists(select name from sysobjects where typep and namecheckUserProc)drop procedure checkUserProcgocreate procedure checkUserProc(checkResult int output,checkUser varchar(50),checkPassword varchar(100))asif exists(select * from userT…

PAT乙类之1011 A+B 和 C

一、题目 给定区间 [−2​^31, 2 ^31​​ ] 内的 3 个整数 A、B 和 C&#xff0c;请判断 AB 是否大于 C。输入格式&#xff1a; 输入第 1 行给出正整数 T (≤10)&#xff0c;是测试用例的个数。随后给出 T 组测试用例&#xff0c;每组占一行&#xff0c;顺序给出 A、B 和 C。…

LeetCode 492. 构造矩形

1. 题目 作为一位web开发者&#xff0c; 懂得怎样去规划一个页面的尺寸是很重要的。 现给定一个具体的矩形页面面积&#xff0c;你的任务是设计一个长度为 L 和宽度为 W 且满足以下要求的矩形的页面。要求&#xff1a; 你设计的矩形页面必须等于给定的目标面积。 宽度 W 不应…

uuid生成_php如何生成 uuid(总结)

1、UUID的格式是什么&#xff1f;UUID格式为&#xff1a;xxxxxxxx-xxxx-xxxx-xxxxxx-xxxxxxxxxx (8-4-4-4-12)&#xff0c;其中每个 x 是 0-9 或 a-f 范围内的一个十六进制的数字2、UUID使用实例&#xff1f;用md5函数生成密码字符串&#xff0c;然后substr函数在里面截取就好&…

PAT乙类之1012 数字分类 (20 分)

一、 题目 给定一系列正整数&#xff0c;请按要求对数字进行分类&#xff0c;并输出以下 5 个数字&#xff1a; A​1 能被 5 整除的数字中所有偶数的和&#xff1b; A​2 将被 5 除后余 1 的数字按给出顺序进行交错求和&#xff0c;即计算 n1−n2n3−n4⋯&#xff1b; A3 被 5…

C#.net同步异步SOCKET通讯和多线程总结(转)

C#.net同步异步SOCKET通讯和多线程总结 来源&#xff1a;http://www.cnblogs.com/Silverlight_Team/archive/2009/03/13/1411136.html 同步套接字通信 Socket支持下的网上点对点的通信 服务端实现监听连接&#xff0c;客户端实现发送连接请求&#xff0c;建立连接后进行发送和…

python delta_Python 函数

一、函数的基本语法及特性函数定义&#xff1a;定义: 函数是指将一组语句的集合通过一个名字(函数名)封装起来&#xff0c;要想执行这个函数&#xff0c;只需调用其函数名即可特性:减少重复代码使程序变的可扩展使程序变得易维护语法定义&#xff1a;#def 函数名(参数)&#xf…

浏览器返回错误汇总分析

错误代码&#xff1a;400 400错误是由于不正确的请求造成的&#xff0c;说明正在搜索的网页可能已经删除、更名或暂时不可用。 错误代码&#xff1a;401.1 401.1错误是由于登陆失败造成的&#xff0c;说明没有权限查看该目录或网页。 错误代码&#xff1a;401.2 401.2错误是由于…

PAT乙类1013 数素数 (20 分)

一、题目 令 P​i表示第 i 个素数。现任给两个正整数 M≤N≤10^4&#xff0c;请输出 PM到 PN的所有素数。输入格式&#xff1a; 输入在一行中给出 M 和 N&#xff0c;其间以空格分隔。输出格式&#xff1a; 输出从 P​M到 P​N的所有素数&#xff0c;每 10 个数字占 1 行&…