天天看點

《劍指offer》之從上往下列印二叉樹(python實作)

問題描述:從上往下列印出二叉樹的每個節點,同層節點從左至右列印。

思路分析:
從題意看這就是二叉樹的層次周遊,寬度優先搜尋問題。
借助兩個數組,一個用來存儲節點(這是一個隊列),另外一個用來存儲節點值(result)。
從根節點開始周遊節點,把每一層的節點都放進這個隊列中;
開始周遊這個隊列,将隊列的值以及放進result數組中最後傳回。
總結一下:
1)将根節點加入隊列
2)隊列不為空時取隊首元素的值append到result數組
3)将下一層節點加入隊列隊尾
4)傳回第二步,直到隊列為空結束
           

python代碼實作如下:

# -*- coding:utf-8 -*-
# class TreeNode:
#     def __init__(self, x):
#         self.val = x
#         self.left = None
#         self.right = None
class Solution:
    # 傳回從上到下每個節點值清單,例:[1,2,3]
    def PrintFromTopToBottom(self, root):
        # write code here
        if not root:
            return []
        queue = [root]
        result = []
        while len(queue) > 0:
            Hqueue = queue.pop(0)
            result.append(Hqueue.val)
            if Hqueue.left:
                queue.append(Hqueue.left)
            if Hqueue.right:
                queue.append(Hqueue.right)
        return result