打印二叉树的左视图


Question

给出一个二叉树,写一个有效的算法来打印二叉树的左视图。
1
/
2 3
/ /
4 5 6 7
/
8 9

输出:1 2 4 8



Code

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
class Node
{
int data;
Node left, right;

public Node(int item)
{
data = item;
left = right = null;
}
}

/* Class to print the left view */
public class A045
{
Node root;
static int max_level = 0;

// recursive function to print left view
void leftViewUtil(Node node, int level)
{
// Base Case
if (node==null) return;

// If this is the first node of its level
if (max_level < level)
{
System.out.print(" " + node.data);
max_level = level;
}

// Recur for left and right subtrees
leftViewUtil(node.left, level+1);
leftViewUtil(node.right, level+1);
}

// A wrapper over leftViewUtil()
void leftView()
{
leftViewUtil(root, 1);
}

/* testing for example nodes */
public static void main(String args[])
{
/* creating a binary tree and entering the nodes */
A045 tree = new A045();
tree.root = new Node(1);
tree.root.left = new Node(2);
tree.root.right = new Node(3);
tree.root.left.left = new Node(4);
tree.root.left.right = new Node(5);
tree.root.right.left = new Node(6);
tree.root.right.right = new Node(7);
tree.root.right.left.left = new Node(8);
tree.root.right.right.right = new Node(9);
tree.leftView();
}
}