题目链接:
https://leetcode-cn.com/problems/cong-shang-dao-xia-da-yin-er-cha-shu-iii-lcof/
题意:
请实现一个函数按照之字形顺序打印二叉树,即第一行按照从左到右的顺序打印,第二层按照从右到左的顺序打印,第三行再按照从左到右的顺序打印,其他行以此类推。
题解:
法一:
和之前按顺序输出一样,只不过在返回时,按照题目要求将个别列表给翻转一下即可。
法二:
在层次遍历时,按照题目要求去将新的点添加在队列的合适位置即可。
代码:
# Definition for a binary tree node.
# class TreeNode:
# def __init__(self, x):
# self.val = x
# self.left = None
# self.right = None
#法二
class Solution:
def levelOrder(self, root: TreeNode) -> List[List[int]]:
if root == None :
return []
q,ret,tmp = [],[],[]
q.append([root,1])
depth=1
while len(q)>0:
top = q[0]
if top[1]>depth:
depth+=1
ret.append(tmp)
tmp=[]
q.pop(0)
tmp.append(top[0].val)
pos =-1
for i in range(len(q)):
if q[i][1]>depth:
pos = i
break
if pos == -1:
pos =len(q)
if depth&1 :
if top[0].left != None :q.insert(pos,[top[0].left,depth+1])
if top[0].right != None :q.insert(pos,[top[0].right,depth+1])
else:
if top[0].right != None :q.insert(pos,[top[0].right,depth+1])
if top[0].left != None :q.insert(pos,[top[0].left,depth+1])
ret.append(tmp)
return ret