1. 程式人生 > >【劍指offer】分行從上到下列印二叉樹,層次遍歷,每一層在一行輸出

【劍指offer】分行從上到下列印二叉樹,層次遍歷,每一層在一行輸出

在這裡插入圖片描述
與上一篇部落格層次遍歷二叉樹不同,這次是需要將每一層列印在同一行,這就需要判斷每一層的元素:
注意到,將每一層列印完了之後,下面的一層也全部進入到了佇列,因此採用一個計數器:nextLevel來計算下一層的個數,使用toBeList計算這層還麼有列印完的個數
初始nextLevel = 0, toBeList = 1,之後每次放入一個佇列,nextLevel+1,每次出一個佇列,toBeList-1,知道toBeList為0之後,就說明這層的列印完了,同時下一層已經計數了

            if toBeList == 0:
                results.append(
result) result = [] toBeList = nextLevel nextLevel = 0

程式碼:

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 list = [] #佇列 result = [] #每一層的結果 results = [] #儲存result的list nextLevel = 0 toBeList = 1 #這層還需要加入result的元素個數 if root == None: return list list.append(root) while list != []: treeNode =
list.pop(0) toBeList -= 1 result.append(treeNode.val) if treeNode.left: nextLevel += 1 list.append(treeNode.left) if treeNode.right: nextLevel += 1 list.append(treeNode.right) if toBeList == 0: results.append(result) result = [] toBeList = nextLevel nextLevel = 0 return results

測試:

root = TreeNode(1)
root.left = TreeNode(2)
root.right = TreeNode(3)
root.left.left = TreeNode(4)
root.right.left = TreeNode(5)
root.right.right = TreeNode(6)
results = Solution().PrintFromTopToBottom(root)
for i in results:
    print(i)

結果:

[1]
[2, 3]
[4, 5, 6]