算法的重要性,我就不多说了吧,想去大厂,就必须要经过基础知识和业务逻辑面试+算法面试。所以,为了提高大家的算法能力,这个公众号后续每天带大家做一道算法题,题目就从LeetCode上面选 !

今天和大家聊的问题叫做 二叉树的竖直遍历,我们先来看题面:

https://leetcode-cn.com/problems/binary-tree-vertical-order-traversal/

Given a binary tree, return the vertical order traversal of its nodes' values. (ie, from top to bottom, column by column).

If two nodes are in the same row and column, the order should be from left to right.

给定一个二叉树,返回其结点 垂直方向(从上到下,逐列)遍历的值。

如果两个结点在同一行和列,那么顺序则为 从左到右。

示例

解题

https://www.cnblogs.com/grandyang/p/5278930.html

这道题让我们竖直遍历二叉树,并把每一列存入一个二维数组,看题目中给的第一个例子,3和 15 属于同一列,3在前,第二个例子中,3,5,2 在同一列,3在前,5和2紧随其后,那么隐约的可以感觉到好像是一种层序遍历的前后顺序,如何来确定列的顺序呢,这里可以把根节点给个序号0,然后开始层序遍历,凡是左子节点则序号减1,右子节点序号加1,这样可以通过序号来把相同列的节点值放到一起,用一个 TreeMap 来建立序号和其对应的节点值的映射,用 TreeMap 的另一个好处是其自动排序功能可以让列从左到右,由于层序遍历需要用到 queue,此时 queue 里不能只存节点,而是要存序号和节点组成的 pair 对儿,这样每次取出就可以操作序号,而且排入队中的节点也赋上其正确的序号,代码如下:

class Solution {
public:vector<vector<int>> verticalOrder(TreeNode* root) {vector<vector<int>> res;if (!root) return res;map<int, vector<int>> m;queue<pair<int, TreeNode*>> q;q.push({0, root});while (!q.empty()) {auto a = q.front(); q.pop();m[a.first].push_back(a.second->val);if (a.second->left) q.push({a.first - 1, a.second->left});if (a.second->right) q.push({a.first + 1, a.second->right});}for (auto a : m) {res.push_back(a.second);}return res;}
};

好了,今天的文章就到这里,如果觉得有所收获,请顺手点个在看或者转发吧,你们的支持是我最大的动力 。

上期推文:

LeetCode1-280题汇总,希望对你有点帮助!

LeetCode刷题实战301:删除无效的括号

LeetCode刷题实战302:包含全部黑色像素的最小矩阵

LeetCode刷题实战303:区域和检索 - 数组不可变

LeetCode刷题实战304:二维区域和检索 - 矩阵不可变

LeetCode刷题实战305:岛屿数量II

LeetCode刷题实战306:累加数

LeetCode刷题实战307:区域和检索 - 数组可修改

LeetCode刷题实战308:二维区域和检索 - 可变

LeetCode刷题实战309:最佳买卖股票时机含冷冻期

LeetCode刷题实战310:最小高度树

LeetCode刷题实战311:稀疏矩阵的乘法

LeetCode刷题实战312:戳气球

LeetCode刷题实战313:超级丑数

​LeetCode刷题实战314:二叉树的竖直遍历相关推荐

  1. LeetCode刷题实战1:在数组上遍历出花样

    算法的重要性,我就不多说了吧,想去大厂,就必须要经过基础知识和业务逻辑面试+算法面试.所以,为了提高大家的算法能力,这个公众号后续每天带大家做一道算法题,题目就从LeetCode上面选 ! 废话不多说 ...

  2. ​LeetCode刷题实战623:在二叉树中增加一行

    算法的重要性,我就不多说了吧,想去大厂,就必须要经过基础知识和业务逻辑面试+算法面试.所以,为了提高大家的算法能力,这个公众号后续每天带大家做一道算法题,题目就从LeetCode上面选 ! 今天和大家 ...

  3. ​LeetCode刷题实战371:两整数之和

    算法的重要性,我就不多说了吧,想去大厂,就必须要经过基础知识和业务逻辑面试+算法面试.所以,为了提高大家的算法能力,这个公众号后续每天带大家做一道算法题,题目就从LeetCode上面选 ! 今天和大家 ...

  4. ​LeetCode刷题实战375:猜数字大小 II

    算法的重要性,我就不多说了吧,想去大厂,就必须要经过基础知识和业务逻辑面试+算法面试.所以,为了提高大家的算法能力,这个公众号后续每天带大家做一道算法题,题目就从LeetCode上面选 ! 今天和大家 ...

  5. ​LeetCode刷题实战546:移除盒子

    算法的重要性,我就不多说了吧,想去大厂,就必须要经过基础知识和业务逻辑面试+算法面试.所以,为了提高大家的算法能力,这个公众号后续每天带大家做一道算法题,题目就从LeetCode上面选 ! 今天和大家 ...

  6. ​LeetCode刷题实战584:寻找用户推荐人

    算法的重要性,我就不多说了吧,想去大厂,就必须要经过基础知识和业务逻辑面试+算法面试.所以,为了提高大家的算法能力,这个公众号后续每天带大家做一道算法题,题目就从LeetCode上面选 ! 今天和大家 ...

  7. ​LeetCode刷题实战577:员工奖金

    算法的重要性,我就不多说了吧,想去大厂,就必须要经过基础知识和业务逻辑面试+算法面试.所以,为了提高大家的算法能力,这个公众号后续每天带大家做一道算法题,题目就从LeetCode上面选 ! 今天和大家 ...

  8. ​LeetCode刷题实战631:设计 Excel 求和公式

    算法的重要性,我就不多说了吧,想去大厂,就必须要经过基础知识和业务逻辑面试+算法面试.所以,为了提高大家的算法能力,这个公众号后续每天带大家做一道算法题,题目就从LeetCode上面选 ! 今天和大家 ...

  9. ​LeetCode刷题实战568:最大休假天数

    算法的重要性,我就不多说了吧,想去大厂,就必须要经过基础知识和业务逻辑面试+算法面试.所以,为了提高大家的算法能力,这个公众号后续每天带大家做一道算法题,题目就从LeetCode上面选 ! 今天和大家 ...

最新文章

  1. 匿名函数的this指向为什么是window?
  2. Machine Learning week 5 quiz: Neural Networks: Learning
  3. B站疯传,一整套人工智能学习资料免费送,不谢!
  4. 二叉搜索树中第k大元素_二叉搜索树中第K个最小元素
  5. 利用计算机找出函数关系式,使用 CHOOSE 查找函数中类似于表的信息 - Excel公式函数运用大全...
  6. hibernate连接mysql 释放连接_SSH 占用数据库连接不释放问题
  7. c++ n次方函数_高一数学必修一函数知识点总结
  8. php可逆加密函数,简洁的PHP可逆加密函数
  9. window下的免安装redis
  10. QAction QActionGroup QMenu 使用方法
  11. hadoop 运行过程中出现Call to localhost/127.0.0.1:9000 failed on connection exception错误。
  12. EasyExcel 固定(冻结)单元格
  13. 大数据Hive搭建部署常见报错信息原因
  14. Android入门小项目--微信登录界面源码(倒计时、fragement切换、activity信息传递)
  15. Matlab:数据分析与多项式计算
  16. PIPIOJ 1004: 惠民工程
  17. 阶乘末尾 0 的个数.c
  18. mac m1 prometheus安装与启动
  19. 经典算法研究系列:图像特征提取与匹配之SIFT算法
  20. MUI移动端开发,嵌入ifream,页面返回问题解决

热门文章

  1. php基础九(通过cURL来做小偷程序)
  2. .net Core 6.0 部署到欧拉(Linux)系统上,“The type initializer for ‘Gdip‘ threw an exception” 报错的解决方案
  3. Spring源码分析之AOP源码分析
  4. python连接eplan的api_EPLAN API开发之入门篇
  5. BLAG: Improving the Accuracy of Blacklists
  6. 1+X云计算运维与开发 项目一(初中级)
  7. unity List记录
  8. Springboot(编程不良人)
  9. 38 --> 详解 OpenWRT RESET按键、键盘响应逻辑
  10. 独家3.1.2版本独立微信社群人脉系统社群空间站最新源开码源+详细教程