任务是编写一个打印"左视图" (从左侧查看树时可见的节点。)二叉树。
例如,以下树的左视图是1 2 4 8
1
/ \
2 3
/ \ / \
4 5 6 7
\
8
我希望看到其他人的解决方案。
答案 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;
}