[LeetCode] Binary Tree Level Order Traversal

Given a binary tree, return the level order traversal of its nodes' values. (ie, from left to right, level by level).

For example:
Given binary tree {3,9,20,#,#,15,7},

    3
   / \
  9  20
    /  \
   15   7

return its level order traversal as:

[
  [3],
  [9,20],
  [15,7]
]

confused what "{1,#,2,3}" means? > read more on how binary tree is serialized on OJ.


OJ's Binary Tree Serialization:

The serialization of a binary tree follows a level order traversal, where '#' signifies a path terminator where no node exists below.

Here's an example:

   1
  / \
 2   3
    /
   4
    \
     5
The above binary tree is serialized as  "{1,2,3,#,#,4,#,#,5}".
这题目其实是要求按层遍历二叉树,并且分层输出。在遍历二叉树时最简单就是递归了,但简单递归无法保存层的信息,在借助队列遍历时,也只能简单的按层输出,无法确

元素在那一层,这里借鉴了别人的思想:设置两个标记量分别标记parent数和child数,再说一次,要得到按层遍历的序列不难,难的是怎么确定什么时候是分层,开始的

时候queue只有root一个元素,此时parentIndex = 1, childIndex = 0,由于它的left和right都为飞空,所以root.left 和 root.right 分别入队列,

childIndex 递增两次,即childIndex += 2。。。算了,我也说不清,还是上代码吧:

class TreeNode:
	def __init__(self, x):
		self.val = x
		self.left = None
		self.right = None

class Solution:
	# @param root, a tree node
	# @param sum, an integer
	# @return a boolean
			
	def levelOrder(self, root):
		if None == root:
			return []
		queue = [root]
		ret = []
		tmp = []
		parentIndex = 1
		childIndex = 0
		while len(queue) > 0:
			leaf = queue[0]
			tmp.append(leaf.val)
			del queue[0]
			if None != leaf.left:
				queue.append(leaf.left)
				childIndex += 1
			if None != leaf.right:
				queue.append(leaf.right)
				childIndex += 1
			parentIndex -= 1

			if 0 == parentIndex:
				ret.append(tmp)
				tmp = []
				parentIndex = childIndex
				childIndex = 0
		return ret




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值