描述
给出一棵二叉树,返回其节点值的锯齿形层次遍历(先从左往右,下一层再从右往左,层与层之间交替进行)
您在真实的面试中是否遇到过这个题?
是
样例
给出一棵二叉树 {3,9,20,#,#,15,7}
,
3 / \ 9 20 / \ 15 7
返回其锯齿形的层次遍历为:
[
[3],
[20,9],
[15,7]
]
实现代码:
思路:
从题目描述也可以清楚的看出,采用二叉树的层次遍历最好解决,在每一层加上一个翻转。
代码:
"""
Definition of TreeNode:
class TreeNode:
def __init__(self, val):
self.val = val
self.left, self.right = None, None
"""
Definition of TreeNode:
class TreeNode:
def __init__(self, val):
self.val = val
self.left, self.right = None, None
"""
class Solution:
"""
@param root: A Tree
@return: A list of lists of integer include the zigzag level order traversal of its nodes' values.
"""
def zigzagLevelOrder(self, root):
# write your code here
self.results = []
if not root:
return self.results
q = [root]
flag = 0
while q:
new_q = []
flag += 1
if flag % 2 != 0:
self.results.append([n.val for n in q])
else:
self.results.append([n.val for n in reversed(q)])
for node in q:
if node.left:
new_q.append(node.left)
if node.right:
new_q.append(node.right)
q = new_q
"""
@param root: A Tree
@return: A list of lists of integer include the zigzag level order traversal of its nodes' values.
"""
def zigzagLevelOrder(self, root):
# write your code here
self.results = []
if not root:
return self.results
q = [root]
flag = 0
while q:
new_q = []
flag += 1
if flag % 2 != 0:
self.results.append([n.val for n in q])
else:
self.results.append([n.val for n in reversed(q)])
for node in q:
if node.left:
new_q.append(node.left)
if node.right:
new_q.append(node.right)
q = new_q
return self.results