题目:从上往下打印出二叉树的每个结点,同一层的结点按照从左到右的顺序打印。
解题思路:每一次打印一个结点的时候,如果该结点有子结点,则把该结点的子结点放到一个队列的末尾。接下来到队列的头部取出最早进入队列的结点,重复前面的打印操作,直至队列中所有的结点都被打印出来为止。
C#实现:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
|
public
static
void
PrintFromTopToBottom(BinaryTreeNode pTreeRoot)
{
if
(pTreeRoot ==
null
)
return
;
Queue<BinaryTreeNode> quequeNode =
new
Queue<BinaryTreeNode>();
quequeNode.Enqueue(pTreeRoot);
while
(quequeNode.Count > 0)
{
BinaryTreeNode pNode = quequeNode.Dequeue();
Console.Write(pNode.value +
"\t"
);
if
(pNode.left !=
null
)
quequeNode.Enqueue(pNode.left);
if
(pNode.right !=
null
)
quequeNode.Enqueue(pNode.right);
}
}
|
Java实现:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
|
public
static
void
PrintFromTopToBottom(BinaryTreeNode pTreeRoot) {
if
(pTreeRoot ==
null
)
return
;
LinkedList<BinaryTreeNode> quequeNode =
new
LinkedList<BinaryTreeNode>();
quequeNode.add(pTreeRoot);
while
(quequeNode.size() >
0
) {
BinaryTreeNode pNode = quequeNode.removeFirst();
System.out.print(pNode.value +
"\t"
);
if
(pNode.left !=
null
)
quequeNode.add(pNode.left);
if
(pNode.right !=
null
)
quequeNode.addLast(pNode.right);
}
}
|
Python实现:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
|
@staticmethod
def
printFromTopToBottom(pTreeRoot):
"""
从上往下打印二叉树
从上往下打印出二叉树的每个结点,同一层的结点按照从左到右的顺序打印。
:param pTreeRoot:
:return:
"""
if
pTreeRoot
=
=
None
:
return
queueNode
=
[]
queueNode.append(pTreeRoot)
while
len
(queueNode) >
0
:
pNode
=
queueNode[
0
]
queueNode
=
queueNode[
1
:]
print
(pNode.value, end
=
" "
)
if
pNode.left !
=
None
:
queueNode.append(pNode.left)
if
pNode.right !
=
None
:
queueNode.append(pNode.right)
|
本文转自 许大树 51CTO博客,原文链接:http://blog.51cto.com/abelxu/1975141,如需转载请自行联系原作者