题目:从上往下打印出二叉树的每个结点,同一层的结点按照从左到右的顺序打印。

    解题思路:每一次打印一个结点的时候,如果该结点有子结点,则把该结点的子结点放到一个队列的末尾。接下来到队列的头部取出最早进入队列的结点,重复前面的打印操作,直至队列中所有的结点都被打印出来为止。

    C#实现:

public static void PrintFromTopToBottom(BinaryTreeNode pTreeRoot)        {            if (pTreeRoot == null)                return;            Queue
 quequeNode = new Queue
();            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
 quequeNode = new LinkedList
(); 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)