从上往下打印二叉树

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

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

    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)

点赞