文章目录

  • 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]3/\/  \9    8/\   /\/  \ /  \
4   0 1   7 输出:
[[4],[9],[3,0,1],[8],[7]
]示例 3:
输入: [3,9,8,4,0,1,7,null,null,null,2,5]
(注意:0 的右侧子节点为 2,1 的左侧子节点为 5)3/\/  \9   8/\  /\/  \/  \4  01   7/\/  \5   2输出:
[[4],[9,5],[3,0,1],[8,2],[7]
]

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

2. 解题

2.1 DFS

  • 记录深度、横坐标,按横坐标存入map,取出来的时候按深度排序
class Solution {map<int, vector<pair<int,int>>> ans;
public:vector<vector<int>> verticalOrder(TreeNode* root) {dfs(root, 0, 0);vector<vector<int>> res;for(auto& a : ans){   //按横坐标取出sort(a.second.begin(), a.second.end(),[&](auto a, auto b){return a.first < b.first;//按深度排序});vector<int> temp;for(auto& d_val : a.second)temp.push_back(d_val.second);res.push_back(temp);}return res;}void dfs(TreeNode* root, int x, int deep){if(!root) return;ans[x].push_back({deep, root->val});//深度、valdfs(root->left, x-1, deep+1);dfs(root->right, x+1, deep+1);}
};

8 ms 8.7 MB

2.2 BFS

  • 只需记录x横坐标,存入map,从顶向下BFS层次遍历(保证从上到下的顺序)
class Solution {public:vector<vector<int>> verticalOrder(TreeNode* root) {if(!root) return {};vector<vector<int>> res;map<int,vector<int>> m;queue<pair<TreeNode*,int>> q;int size, x, val;TreeNode *cur;q.push({root, 0});while(!q.empty()){size = q.size();while(size--){cur = q.front().first;val = cur->val;x = q.front().second;q.pop();m[x].push_back(val);if(cur->left)q.push({cur->left, x-1});if(cur->right)q.push({cur->right, x+1});}}for(auto& mi : m)res.push_back(mi.second);return res;}
};

8 ms 8.1 MB


我的CSDN博客地址 https://michael.blog.csdn.net/

长按或扫码关注我的公众号(Michael阿明),一起加油、一起学习进步!

LeetCode 314. 二叉树的垂直遍历(BFS/DFS)相关推荐

  1. 314.二叉树的垂直遍历

    链接:https://www.jiuzhang.com/solutions/binary-tree-vertical-order-traversal/ 题解: /*** Definition of T ...

  2. 二叉树的深度优先遍历(DFS)与广度优先遍历(BFS)

    二叉树的深度优先遍历(DFS)与广度优先遍历(BFS) 深度优先遍历:从根节点出发,沿着左子树方向进行纵向遍历,直到找到叶子节点为止.然后回溯到前一个节点,进行右子树节点的遍历,直到遍历完所有可达节点 ...

  3. 刷题笔记(十四)--二叉树:层序遍历和DFS,BFS

    目录 系列文章目录 前言 题录 102. 二叉树的层序遍历 BFS DFS_前序遍历 107. 二叉树的层序遍历 II BFS DFS 199. 二叉树的右视图 BFS DFS 637. 二叉树的层平 ...

  4. leetcode 102.二叉树的层序遍历

    难度:中等 频率:150 题目: 给你一个二叉树,请你返回其层序遍历得到的节点值(逐层,从左到右访问所有节点) 做这道题 之前先回忆一下数据结构里的 BFS(Breath First Search,广 ...

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

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

  6. PAT甲级1130 Infix Expression:[C++题解]中缀表达式、二叉树中序遍历、dfs

    文章目录 题目分析 题目链接 题目分析 来源:acwing 分析:本题是借助中缀表达式这个背景,考察二叉树的中序遍历.本题需要注意的地方是加括号. 左子树和右子树无脑加括号,只要不是叶结点. 所以写d ...

  7. LeetCode 102二叉树的层序遍历103二叉树锯齿形遍历104二叉树的最大深度

    微信搜一搜:bigsai 大家都在关注的刷题.学习数据结构和算法宝藏项目 关注回复进群即可加入力扣打卡群,欢迎划水.近期打卡: LeetCode 97交错字符串(动态规划) LeetCode 98验证 ...

  8. [leetcode] 144. 二叉树的前序遍历

    144. 二叉树的前序遍历 递归写法 class Solution {public List<Integer> preorderTraversal(TreeNode root) {List ...

  9. 二叉树的层序遍历(BFS)

    文章目录 二叉树的层序遍历(bfs) 思想: BFS: 102.二叉树层序遍历 题目 思路 103.二叉树的锯齿形层序遍历 题目 199.二叉树的右视图 题目: 代码 二叉树的层序遍历(bfs) 思想 ...

最新文章

  1. AdminLTE的使用
  2. JavaScript 工作原理之十一-渲染引擎及性能优化小技巧
  3. python深拷贝一个对象_Python对象的深拷贝和浅拷贝详解
  4. 网卡驱动和队列层中的数据包接收
  5. mysql查询周数_MySQL:查询中从周数开始的周日期范围
  6. 这些屌毛总是给订阅号发x图,连夜肝了一个微信订阅号鉴黄机器人抵御~
  7. python递归查找_Python程序使用递归查找数字的幂
  8. [视频]中国军事专家论谷歌地球(Google Earth)
  9. android tab之间滑动切换界面功能
  10. ThinkPHP3.2.3目录结构
  11. IIS中防止MDB被下载的办法
  12. 销售订单获取不到即时库存
  13. matlab-自控原理 已知x~=Ax+Bu中的AB矩阵和X0,求单位输入下的时间响应
  14. JavaWeb开发Session管理
  15. 微信公众号服务器图文消息发送规则,微信公众服务号怎么一天发一条图文消息?...
  16. 思考的力量-总结-脑图
  17. 【技术答疑】Swarm BZZ常见技术问题解答
  18. 关于通过图注意神经网络处理多元时间序列的错误预测论文的讨论
  19. 路由器局域网IP(内网IP)和外网IP的关系
  20. 文件管理nas php,家用nas安装配置可道云进行文件管理

热门文章

  1. python程序写诗_将Python诗歌与D结合起来
  2. Top 10 Project Management Software
  3. 解决若要安装 Microsoft Office 2010,需要MSXML 版本 6.10.1129的问题
  4. 【转】iOS的APP资源,开源的哦
  5. 2015-8-10工作日志
  6. 7.Reverse Integer (INT; Overflow)
  7. java-设计模式(结构型)-【代理模式】
  8. Android菜鸟如何学习Android系统开发?
  9. 解决eclipse无法解析导入org.eclipse.swt库
  10. HTTP和HTTPS详解