您的位置:首页 > 其它

Binary Tree Level Order Traversal

2016-07-29 19:45 387 查看
leetcode第102题,按层输出二叉树,这道题看上去简单,但是确实需要一定技巧。

首先,既然是按层输出,当然首先想到广搜,但是广搜有一个很大的问题需要解决,那就是如何标记节点属于哪一个层,如果节点的定义可以加入层数属性即可解决,但是树的节点定义不能改变,所以只能想另外的办法。

我参考的方法是这样,首先正常的进行广搜,不断地把左右结点加入搜索对列,在加入的同时会有一个一开始初始化为1的计数器,当到第二层的时候,计数器自减归零,此时判断计数器是否为零,如果是说明第一层已经结束了,结果加入第二层节点的值,同时把计数器记录当前搜索队列的元素个数。当继续向下广搜的时候,随着原来第二层的两个节点陆续出队,计数器再次归零,此时搜索队列中只有第三次的元素了,以此类推即可求解。

最后注意需要检查一下对列是否为空,否则会加入一个空列表。

# Definition for a binary tree node.
# class TreeNode(object):
#     def __init__(self, x):
#         self.val = x
#         self.left = None
#         self.right = None

class Solution(object):
def levelOrder(self, root):
"""
:type root: TreeNode
:rtype: List[List[int]]
"""
if root == None:
return []
queue = [root]
ans = [[root.val]]
count = 1
while len(queue) > 0:
curNode = queue[0]
del queue[0]
if curNode.left != None:
queue.append(curNode.left)
if curNode.right != None:
queue.append(curNode.right)
count -= 1
if count == 0 and len(queue) != 0:
ans.append([x.val for x in queue])
count = len(queue)
return ans
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: