題目:從上往下打印出二叉樹的每個結點,同一層的結點按照從左到右的順序打印。
解題思路:每一次打印一個結點的時候,如果該結點有子結點,則把該結點的子結點放到一個隊列的末尾。接下來到隊列的頭部取出最早進入隊列的結點,重複前面的打印操作,直至隊列中所有的結點都被打印出來爲止。
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)