【问题标题】:Print out the left view of a Binary Tree打印出二叉树的左视图
【发布时间】:2017-03-14 06:05:42
【问题描述】:

任务是编写一个函数来打印二叉树的“左视图”(从左侧查看树时可见的节点。)。

例如下面这棵树的左视图是 1 2 4 8

          1
       /     \
     2        3
   /   \     /  \
  4     5   6    7
                  \
                   8

我想看看其他人的解决方案。

【问题讨论】:

  • 你的解决方案是什么?
  • 我从书中添加了我的算法实现。

标签: algorithm recursion


【解决方案1】:

我的解决方案使用递归。 (C#)

    private static int globalDepth = 0;
    public static void PrintLeftSide (Node root, int localDepth)
    {
        if (root == null)
        {
            return;
        }
        if (localDepth > globalDepth)
        {
            Console.WriteLine(root.Value);
            globalDepth++;
        }
        PrintLeftSide(root.Left, localDepth + 1);
        PrintLeftSide(root.Right, localDepth + 1);
    }

【讨论】:

    【解决方案2】:

    另一种不使用全局变量的方法。调用时,currentLevel 参数值将设置为 1,maxLevel 值将设置为 0

        public static int LeftView(TreeNode node, int currentLevel, int maxLevel)
        {
            if (node == null)
                return 0;
    
            if (currentLevel > maxLevel)
            { 
                Console.Write(node.Value + " ");
                maxLevel = currentLevel;
            }
    
            var leftLevel = LeftView(node.Left, currentLevel + 1, maxLevel);
    
            maxLevel = maxLevel > leftLevel ? maxLevel : leftLevel;
    
            var rightLevel = LeftView(node.Right, currentLevel + 1, maxLevel);
    
            return maxLevel > rightLevel? maxLevel:rightLevel;
        }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2022-11-11
      • 1970-01-01
      • 1970-01-01
      • 2016-03-28
      • 2012-04-15
      • 1970-01-01
      • 1970-01-01
      • 2012-06-29
      相关资源
      最近更新 更多