题目:从上往下打印出二叉树的每个结点,同一层的结点按照从左到右的顺序打印。
解题思路:每一次打印一个结点的时候,如果该结点有子结点,则把该结点的子结点放到一个队列的末尾。接下来到队列的头部取出最早进入队列的结点,重复前面的打印操作,直至队列中所有的结点都被打印出来为止。
C#实现:
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实现:
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实现:
@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)
转载于:https://blog.51cto.com/abelxu/1975141