• 314. 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:

    1. Given binary tree [3,9,20,null,null,15,7],
         3
        /
       /  
       9  20
          /
         /  
        15   7
      

      return its vertical order traversal as:

      [
        [9],
        [3,15],
        [20],
        [7]
      ]
      
    2. Given binary tree [3,9,8,4,0,1,7],
           3
          /
         /  
         9   8
        /  /
       /  /  
       4  01   7
      

      return its vertical order traversal as:

      [
        [4],
        [9],
        [3,0,1],
        [8],
        [7]
      ]
      
    3. Given binary tree [3,9,8,4,0,1,7,null,null,null,2,5] (0's right child is 2 and 1's left child is 5),
           3
          /
         /  
         9   8
        /  /
       /  /  
       4  01   7
          /
         /  
         5   2
      

      return its vertical order traversal as:

      [
        [4],
        [9,5],
        [3,0,1],
        [8,2],
        [7]
      ]
      
    广度优先的题,遍历整个tree
     public IList<IList<int>> VerticalOrder(TreeNode root) {
            var res = new List<IList<int>>();
            if(root == null) return res;
            var hashtable = new Dictionary<int,List<int>>();
            
            Queue<TreeNode> queue = new Queue<TreeNode>();
            Queue<int> queueDeep = new Queue<int>();
            queue.Enqueue(root);
            queueDeep.Enqueue(0);
            while(queue.Count >0 )
            {
                var a = queue.Dequeue();
                int deep = queueDeep.Dequeue(); 
                if(a.left != null)
                {
                    queue.Enqueue(a.left);
                    queueDeep.Enqueue(deep+1);
                }
                
                if(a.right != null)
                {
                     queue.Enqueue(a.right);
                     queueDeep.Enqueue(deep-1);
                }
                
                if(hashtable.ContainsKey(deep))
                {
                var temp = (List<int>)hashtable[deep];
                temp.Add(a.val);
                hashtable[deep] = temp;
                }
                else
                {
                hashtable.Add(deep,new List<int>{a.val});
                }
            }
            var sortHashtable = hashtable.OrderByDescending(x=>x.Key).ToDictionary(x=> x.Key,x=>x.Value);
             foreach(var pair in sortHashtable)
             {
                 res.Add(pair.Value);
             }
             return res;
        }
  • 相关阅读:
    php基本语法与安装
    面向对象编程 es5和es6的构造函数
    利用正则搜索替换
    正则特殊符号
    正则边界符 限定符
    面试官给我挖坑:rm删除文件之后,空间就被释放了吗?
    为什么 IPv6 难以取代 IPv4
    Docker系列教程04-Docker构建镜像的三种方式
    Docker系列教程03-Docker私有仓库搭建(registry)
    Linux-I/O模型详解
  • 原文地址:https://www.cnblogs.com/renyualbert/p/5889082.html
Copyright © 2020-2023  润新知