原题链接在这里:https://leetcode.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.

Examples:
Given binary tree [3,9,20,null,null,15,7],

  1. 3
  2. / \
  3. 9 20
  4. / \
  5. 15 7

return its vertical order traversal as:

  1. [
  2. [9],
  3. [3,15],
  4. [20],
  5. [7]
  6. ]

Given binary tree [3,9,20,4,5,2,7],

  1. _3_
  2. / \
  3. 9 20
  4. / \ / \
  5. 4 5 2 7

return its vertical order traversal as:

  1. [
  2. [4],
  3. [9],
  4. [3,5,2],
  5. [20],
  6. [7]
  7. ]

题解:

Binary Tree Level Order Traversal类似。

BFS, 把TreeNode和它所在的col分别放到两个queue中. dequeue后放TreeNode到对应的 colunm bucket里.

Example of [1,2,3,4,5,6,7,8,9,10,11,12,13,14,15]. Notice that every child access changes one column bucket id. So 12 actually goes ahead of 11.

Time Complexity: O(n). Space: O(n).

AC Java:

  1. /**
  2. * Definition for a binary tree node.
  3. * public class TreeNode {
  4. * int val;
  5. * TreeNode left;
  6. * TreeNode right;
  7. * TreeNode(int x) { val = x; }
  8. * }
  9. */
  10. public class Solution {
  11. public List<List<Integer>> verticalOrder(TreeNode root) {
  12. List<List<Integer>> res = new ArrayList<List<Integer>>();
  13. if(root == null){
  14. return res;
  15. }
  16. HashMap<Integer, List<Integer>> colBucket = new HashMap<Integer, List<Integer>>();
  17. LinkedList<TreeNode> que = new LinkedList<TreeNode>();
  18. LinkedList<Integer> cols = new LinkedList<Integer>();
  19. int min = 0;
  20. int max = 0;
  21.  
  22. que.add(root);
  23. cols.add(0);
  24. while(!que.isEmpty()){
  25. TreeNode tn = que.poll();
  26. int col = cols.poll();
  27. if(!colBucket.containsKey(col)){
  28. colBucket.put(col, new ArrayList<Integer>());
  29. }
  30. colBucket.get(col).add(tn.val);
  31. min = Math.min(min, col);
  32. max = Math.max(max, col);
  33.  
  34. if(tn.left != null){
  35. que.add(tn.left);
  36. cols.add(col-1);
  37. }
  38. if(tn.right != null){
  39. que.add(tn.right);
  40. cols.add(col+1);
  41. }
  42. }
  43. for(int i = min; i<=max; i++){
  44. res.add(colBucket.get(i));
  45. }
  46. return res;
  47. }
  48. }

便于理解,可以吧TreeNode和它对应的column number放在一个Pair里.

Time Complexity: O(n). Space: O(n).

AC Java:

  1. /**
  2. * Definition for a binary tree node.
  3. * public class TreeNode {
  4. * int val;
  5. * TreeNode left;
  6. * TreeNode right;
  7. * TreeNode(int x) { val = x; }
  8. * }
  9. */
  10. public class Solution {
  11. public List<List<Integer>> verticalOrder(TreeNode root) {
  12. List<List<Integer>> res = new ArrayList<List<Integer>>();
  13. if(root == null){
  14. return res;
  15. }
  16.  
  17. HashMap<Integer, List<Integer>> hm = new HashMap<Integer, List<Integer>>();
  18. LinkedList<Pair> que = new LinkedList<Pair>();
  19. que.add(new Pair(root, 0));
  20. int min = 0;
  21. int max = 0;
  22. while(!que.isEmpty()){
  23. Pair cur = que.poll();
  24. if(!hm.containsKey(cur.col)){
  25. hm.put(cur.col, new ArrayList<Integer>());
  26. }
  27. hm.get(cur.col).add(cur.tn.val);
  28. max = Math.max(max, cur.col);
  29. min = Math.min(min, cur.col);
  30.  
  31. if(cur.tn.left != null){
  32. que.add(new Pair(cur.tn.left, cur.col-1));
  33. }
  34. if(cur.tn.right != null){
  35. que.add(new Pair(cur.tn.right, cur.col+1));
  36. }
  37. }
  38. for(int i = min; i<=max; i++){
  39. res.add(hm.get(i));
  40. }
  41. return res;
  42. }
  43.  
  44. public class Pair{
  45. TreeNode tn;
  46. int col;
  47. public Pair(TreeNode tn, int col){
  48. this.tn = tn;
  49. this.col = col;
  50. }
  51. }
  52. }

类似Vertical Order Traversal of a Binary Tree.

LeetCode Binary Tree Vertical Order Traversal的更多相关文章

  1. [LeetCode] Binary Tree Vertical Order Traversal 二叉树的竖直遍历

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

  2. [LeetCode] Binary Tree Level Order Traversal 二叉树层序遍历

    Given a binary tree, return the level order traversal of its nodes' values. (ie, from left to right, ...

  3. LeetCode:Binary Tree Level Order Traversal I II

    LeetCode:Binary Tree Level Order Traversal Given a binary tree, return the level order traversal of ...

  4. [Locked] Binary Tree Vertical Order Traversal

    Binary Tree Vertical Order Traversal Given a binary tree, return the vertical order traversal of its ...

  5. LeetCode 314. Binary Tree Vertical Order Traversal

    原题链接在这里:https://leetcode.com/problems/binary-tree-vertical-order-traversal/ 题目: Given a binary tree, ...

  6. [LeetCode] 314. Binary Tree Vertical Order Traversal 二叉树的竖直遍历

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

  7. [LeetCode] Binary Tree Level Order Traversal II 二叉树层序遍历之二

    Given a binary tree, return the bottom-up level order traversal of its nodes' values. (ie, from left ...

  8. [leetcode]Binary Tree Level Order Traversal II @ Python

    原题地址:http://oj.leetcode.com/problems/binary-tree-level-order-traversal-ii/ 题意: Given a binary tree, ...

  9. LeetCode: Binary Tree Level Order Traversal 解题报告

    Binary Tree Level Order Traversal Given a binary tree, return the level order traversal of its nodes ...

随机推荐

  1. hadoop2的思想架构

    mapreduce 2 思想架构 mr2解决了mr1的jobTracker的单点颈瓶问题,这个问题会影响hadoop的扩展性,集群的可靠性,mr1中jobTracker负责集群作业的分发,管理,调度, ...

  2. python入门一

    python类型 编程语言主要从以下几个角度为进行分类,编译型和解释型.静态语言和动态语言.强类型定义语言和弱类型定义语言. 编译型和解释型 编译型:在程序执行之前,有一个单独的编译过程,将程序翻译成 ...

  3. Markdown 文档格式编写语法

    http://www.cnblogs.com/cxf520/p/6179294.html

  4. 【leetcode】Search Insert Position

    题目描述: Given a sorted array and a target value, return the index if the target is found. If not, retu ...

  5. js的回调函数 一些例子

    这边用bootstrap 3.0的  上传控件做例子 下面是上传控件的一段完整的 js 操作 代码. <!-- 上传缩略图控件配置 --><script> // 定义这四个全局 ...

  6. http协议和浏览器缓存问题

    HTTP是超文本传输协议. HTTP是一个应用层协议,由请求和响应构成,是一个标准的客户端服务器模型.HTTP是一个无状态的协议.

  7. abort 用法讨论

    同事说:  TT***.factary(  procedure()  begin    ....    abort;    ....  end)大家在TTask中不建议用abort因为难以控制,我测试 ...

  8. DataSet、DataTable、Json、List 等各种数据的相互转化

      1.根据Dataset生成json格式的字符串,不管Dataset里面有多少个表都可以一一生成对应的json字符串,并一次性返回 private string dsToJson(DataSet d ...

  9. 简单的SQL联表更新

    UPDATE dbo.bankinfo1 SET bankinfo1.BankName=BankInfo.BankName FROM BankInfo where bankinfo1.banknumb ...

  10. jenkins和hudson---打酱油的日子

    自动化构建:Jenkins起源于Hudson.Hudson在商业软件的路上继续前行,而Jenkins则作为开源软件,从hudson分支出来. 因此现在的jenkins和hudson非常类似,但是随着二 ...