Binary Tree Level Order Traversal
2016-07-29 19:45
387 查看
leetcode第102题,按层输出二叉树,这道题看上去简单,但是确实需要一定技巧。
首先,既然是按层输出,当然首先想到广搜,但是广搜有一个很大的问题需要解决,那就是如何标记节点属于哪一个层,如果节点的定义可以加入层数属性即可解决,但是树的节点定义不能改变,所以只能想另外的办法。
我参考的方法是这样,首先正常的进行广搜,不断地把左右结点加入搜索对列,在加入的同时会有一个一开始初始化为1的计数器,当到第二层的时候,计数器自减归零,此时判断计数器是否为零,如果是说明第一层已经结束了,结果加入第二层节点的值,同时把计数器记录当前搜索队列的元素个数。当继续向下广搜的时候,随着原来第二层的两个节点陆续出队,计数器再次归零,此时搜索队列中只有第三次的元素了,以此类推即可求解。
最后注意需要检查一下对列是否为空,否则会加入一个空列表。
首先,既然是按层输出,当然首先想到广搜,但是广搜有一个很大的问题需要解决,那就是如何标记节点属于哪一个层,如果节点的定义可以加入层数属性即可解决,但是树的节点定义不能改变,所以只能想另外的办法。
我参考的方法是这样,首先正常的进行广搜,不断地把左右结点加入搜索对列,在加入的同时会有一个一开始初始化为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
相关文章推荐
- Binary Tree Level Order Traversal
- 102. Binary Tree Level Order Traversal
- LeetCode--Binary Tree Level Order Traversal
- LeetCode-Binary Tree Level Order Traversal
- Binary Tree Level Order Traversal <leetcode>
- [Lintcode]Binary Tree Level Order Traversal
- 102. Binary Tree Level Order Traversal & 107. Binary Tree Level Order Traversal II & 103. Binary Tre
- Binary Tree Level Order Traversal
- LeetCode Binary Tree Level Order Traversal II
- 【leetcode】Binary Tree Zigzag Level Order Traversal
- Binary Tree Zigzag Level Order Traversal
- LeetCode_binary-tree-level-order-traversal
- 【二叉树层次遍历】Binary Tree Level Order Traversal
- LintCode: Binary Tree Level Order Traversal
- Binary Tree Level Order Traversal
- LeetCode | Binary Tree Level Order Traversal
- Binary Tree Level Order Traversal II
- [Lintcode]Binary Tree Zigzag Level Order Traversal
- 102. Binary Tree Level Order Traversal
- Binary Tree Level Order Traversal II