描述
给出一棵二叉树,返回其节点值的层次遍历(逐层从左往右访问)
您在真实的面试中是否遇到过这个题?
是
样例
给一棵二叉树 {3,9,20,#,#,15,7}
:
3
/ \
9 20
/ \
15 7
返回他的分层遍历结果:
[
[3],
[9,20],
[15,7]
]
挑战
挑战1:只使用一个队列去实现它
挑战2:用DFS算法来做
实现代码:
# 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: Level order a list of lists of integer """ def levelOrder(self, root): # write your code here self.results = [] if not root: return self.results q = [root] while q: new_q = [] self.results.append([n.val for n in 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 #方法二 DFS class Solution: """ @param root: A Tree @return: Level order a list of lists of integer """ def levelOrder(self, root): # write your code here self.results = [] if not root: return self.results thisLevel = 0 self.DFS(root, thisLevel) return self.results def DFS(self, root, thisLevel): if root is None: return if thisLevel > len(self.results) -1: self.results.append([]) self.results[thisLevel].append(root.val) thisLevel += 1 self.DFS(root.left, thisLevel) self.DFS(root.right, thisLevel) return