打印出二叉树的左视图

时间:2017-03-14 06:05:43

标签: algorithm recursion

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

例如,以下树的左视图是1 2 4 8

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

我希望看到其他人的解决方案。

2 个答案:

答案 0 :(得分:0)

我的解决方案使用递归。 (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);
    }

答案 1 :(得分:0)

另一种不使用全局变量的方法。调用时, 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;
    }