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

对位于 (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);
值为 3 和 15 的两个结点分别出现在 (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]]
解释:
根据给定的方案,值为 5 和 6 的两个结点出现在同一位置。
然而,在报告 "[1,5,6]" 中,结点值 5 排在前面,因为 5 小于 6。

提示:

树的结点数介于 1 和 1000 之间。
每个结点值介于 0 和 1000 之间。

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

解法:

/*** 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<vector<int>> verticalTraversal(TreeNode* root) {map<int, vector<int> > m; queue<pair<int, TreeNode*> > q; q.push(make_pair(0, root)); while (!q.empty()){set<pair<int, int> > tmp;  int len = q.size();for (int i = 0; i < len; ++i){auto p = q.front(); q.pop();tmp.insert(make_pair(p.first, p.second->val));if (p.second->left) q.push(make_pair(p.first - 1, p.second->left));if (p.second->right) q.push(make_pair(p.first + 1, p.second->right));}for (auto p : tmp) m[p.first].push_back(p.second);}vector<vector<int> > res;for (auto kv : m) res.push_back(kv.second);return res;}
};

987. 二叉树的垂序遍历相关推荐

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

    1. 题目 给定二叉树,按垂序遍历返回其结点值. 对位于 (X, Y) 的每个结点而言,其左右子结点分别位于 (X-1, Y-1) 和 (X+1, Y-1). 把一条垂线从 X = -infinity ...

  2. Leetcode987 二叉树的垂序遍历

    链接:https://leetcode-cn.com/problems/vertical-order-traversal-of-a-binary-tree 题目描述 给你二叉树的根结点 root ,请 ...

  3. 刻意练习:LeetCode实战 -- 二叉树的后序遍历

    背景 今天,第二期基础算法(Leetcode)刻意练习训练营 的打卡任务是二叉树的中序遍历,由于二叉树的遍历方式通常来说有四种:前序遍历.中序遍历.后序遍历以及层次遍历,而LeetCode也有二叉树的 ...

  4. 二叉树的先序遍历(非递归)

    虽然递归简单理解,但是用递归内存开销大,耗时长,性能往往不如非递归方式 所以这里通过栈,用非递归方法实现二叉树的先序遍历 二叉树的存储结构定义: typedef struct node{int dat ...

  5. 《LeetCode力扣练习》第94题 二叉树的中序遍历 Java

    <LeetCode力扣练习>第94题 二叉树的中序遍历 Java 一.资源 题目: 给定一个二叉树的根节点 root ,返回它的 中序 遍历. 示例 1: 输入:root = [1,nul ...

  6. 树结构练习——排序二叉树的中序遍历(二叉搜索树)

    树结构练习--排序二叉树的中序遍历 Time Limit: 1000MS Memory limit: 65536K 题目描述 在树结构中,有一种特殊的二叉树叫做排序二叉树,直观的理解就是--(1).每 ...

  7. 1.二叉树的中序遍历

    题目:给出一棵二叉树,返回其中序遍历 /** * Definition of TreeNode:  * class TreeNode {  * public:  *     int val;  *   ...

  8. [LeetCode] Binary Tree Postorder Traversal 二叉树的后序遍历

    Given a binary tree, return the postorder traversal of its nodes' values. For example: Given binary ...

  9. LeetCode-二叉树-94. 二叉树的中序遍历

    描述 94. 二叉树的中序遍历 给定一个二叉树的根节点 root ,返回它的 中序 遍历. 示例 1: 输入:root = [1,null,2,3] 输出:[1,3,2] 示例 2: 输入:root ...

最新文章

  1. 不可不知 DDoS的攻击原理与防御方法(2)
  2. 基于ftp服务的三种登录方式及其相关的访问控制和优化
  3. UGUI_UI子节点在Canvas的2D坐标
  4. The7主题-汉化绿色版/免key导入demo/安装插件[更至v9.10.1]
  5. 吴恩达深度学习——2.1 二分分类
  6. Sysfs_linux设备底层模型
  7. dos远程登录oracle,DOS批处理下 操作telnet实现自动远程登录操作
  8. Linux 镜像文件ISO下载
  9. 学习笔记/音视频面试
  10. HTML5+CSS3基础
  11. react native 高德定位 react-native-amap-geolocation
  12. 股票杠杆哪个平台好?具备的资质是怎么样的?
  13. 软件需求说明及对应的测试用例,测试用例与需求的对应关系 - Mr.南柯 - 51Testing软件测试网 51Testing软件测试网-软件测试人的精神家园...
  14. 物流快递电子面单HTML接口API代码-快递100
  15. c语言ae16进制转换,进制转换工具下载_16进制2进制转换with曼彻斯特编码 1.3 免费版_极速下载站_软件下载...
  16. Python:11设计动物Animal类,该类包括颜色color属性与叫call方法。再设计鱼Fish类,包括.....
  17. 使用C#实现ADSL自动拨号
  18. 掌财社:将鳄鱼的特性完全运用到期货战场中
  19. 【原创】十六进制数值与字符串之间的转换(原封不动的转换)
  20. 从前端到服务器全栈搭建个人博客

热门文章

  1. 如何判断微信内置浏览器(JS PHP)
  2. 排序算法(1) 快速排序 C++实现
  3. String.valueOf()
  4. 公司培训文档-JavaScript[对象.属性]集锦
  5. php 打乱数组顺序_PHP实现大转盘抽奖算法
  6. 线性回归csv数据集_测试数据科学家线性回归的30个问题
  7. hls fifo_HLS优化方法DATAFLOW你用了吗
  8. PL/SQL Developer跑在Oracle 64位数据库上初始化错误
  9. OllyDBG反汇编快速找到程序入口一点分析
  10. 通过查看__cplusplus的值查看编译器的C++标准