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