從上往下打印二叉樹

    題目:從上往下打印出二叉樹的每個結點,同一層的結點按照從左到右的順序打印。

    解題思路:每一次打印一個結點的時候,如果該結點有子結點,則把該結點的子結點放到一個隊列的末尾。接下來到隊列的頭部取出最早進入隊列的結點,重複前面的打印操作,直至隊列中所有的結點都被打印出來爲止。

    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)


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章