按之字形順序打印二叉樹
時間限制:1秒 空間限制:32768K 熱度指數:164165
算法知識視頻講解
題目描述
請實現一個函數按照之字形打印二叉樹,即第一行按照從左到右的順序打印,第二層按照從右至左的順序打印,第三行按照從左到右的順序打印,其他行以此類推。
法1.
首先,這題需要用棧而不是隊列。比如測試用例中的例子
8
6 10
5 7 9 11
第一行從左到右放入容器中,即[8]
第二行從右到左放入容器中,即[10,6]
第三行從左到右放入容器中,即[5,7,9,11]
可以看到,第三行的第一、二個元素其實是第二行最後一個元素的左、右子樹,可以看出這個容器應該是棧的結構。
同時,設置一個flag,判斷是否從左到右壓入棧。
代碼
# -*- coding:utf-8 -*-
# class TreeNode:
# def __init__(self, x):
# self.val = x
# self.left = None
# self.right = None
class Solution:
def Print(self, pRoot):
# write code here
if not pRoot: return []
right_2_left_flag = False
res = []
pCur = [pRoot]
pNext = []
temp = []
while pCur:
node = pCur.pop()
if right_2_left_flag:
if node.right:
pNext.append(node.right)
if node.left:
pNext.append(node.left)
else:
if node.left:
pNext.append(node.left)
if node.right:
pNext.append(node.right)
temp.append(node.val)
if not pCur:
pCur = pNext
pNext = []
right_2_left_flag = not right_2_left_flag
res.append(temp)
temp = []
return res
方法2.
層次遍歷,然後反轉
代碼
#層次遍歷,然後反轉
class Solution:
def Print(self, pRoot):
# write code here
if not pRoot:
return []
up = [pRoot]
down = []
res = []
while up:
l = []
for i in up:
l.append(i.val)
if i.left:
down.append(i.left)
if i.right:
down.append(i.right)
res.append(l)
up, down = down, []
for j in range(len(res)):
if j % 2 == 1:
res[j] = res[j][::-1]
return res
鏈接:https://www.nowcoder.com/questionTerminal/91b69814117f4e8097390d107d2efbe0?commentTags=Python
來源:牛客網