【劍指offer】分行從上到下列印二叉樹,層次遍歷,每一層在一行輸出
阿新 • • 發佈:2018-11-26
與上一篇部落格層次遍歷二叉樹不同,這次是需要將每一層列印在同一行,這就需要判斷每一層的元素:
注意到,將每一層列印完了之後,下面的一層也全部進入到了佇列,因此採用一個計數器: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]