问题描述
http://www.lintcode.com/zh-cn/problem/binary-tree-level-order-traversal/#
给出一棵二叉树,返回其节点值的层次遍历(逐层从左往右访问)
样例
给一棵二叉树 {3,9,20,#,#,15,7} :
3
/ \
9 20
/ \
15 7
返回他的分层遍历结果:
[
[3],
[9,20],
[15,7]
]
先从最简单的问题开始
遍历二叉树的第k层,相当于遍历二叉树根节点的左右子树的第k-1层。这样一直遍历下去,直到k=0时,输出节点即可。
def printnode(TreeNode root, int k,list l):
if(not root or k<0):
return 0
if(k==0):
l.append([root.val])
return 0
else:
l.append([printnode(root.left,k-1), printnode(root.left,k-1)]
return 0
层次遍历
写一个for循环即可
for i in range(max_depth):
printnode(root,i,l)
完整代码
"""
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
"""
"""
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 printnode(TreeNode root, int k,list l):
if(not root or k<0):
return 0
if(k==0):
l.append([root.val])
return 0
else:
l.append([printnode(root.left,k-1), printnode(root.left,k-1)]
return 0
def levelOrder(self, root):
# write your code here
max_depth=3
queue=[]
for i in range(max_depth):
self.printnode(self.root,i,queue)
return queue