二叉树层次遍历--广度遍历和深度遍历

问题来源二叉树层次遍历

问题描述:给定一个二叉树,返回其按层次遍历的节点值。 (即逐层地,从左到右访问所有节点)。

例子
给定二叉树: [3,9,20,null,null,15,7],

     3
    /  \
   9   20
      /  \
     15   7

返回其层次遍历结果:

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

思路:广度遍历和深度遍历。

1. 广度遍历

与一般的广度遍历不同的是,每次遍历都将queue弹空,这样就能保证每次queue里存储的都是一个层次的元素。

# 广度遍历
class Solution:
    def levelOrder(self, root: TreeNode) -> List[List[int]]:
    	# 如果树为空
    	if not root:
    		return []
    	# 如果树非空
    	queue = []
    	queue.append(root)
    	res = []
    	while queue:
    		res.append([])
    		cur_level = len(queue)
    		for i in range(cur_level):
    			temp = queue.pop(0)
    			res[-1].append(temp.val)
    			if temp.left:
    				queue.append(temp.left)
    			if temp.right:
    				queue.append(temp.right)
    	return res

2. 深度遍历

与一般深度遍历不同的是,递归过程中我们仅需记住当前节点与层次即可。

# 深度遍历
class Solution:
    def levelOrder(self, root: TreeNode) -> List[List[int]]:
    	# 树为空
    	if root == []:
    		return []
    	# 树非空
    	res = []
    	def Helper(node, level):
    		if len(res) == level:
    			res.append([])
    		res[level].append(node.val)
    		if node.left:
    			Helper(node.left, level+1)
    		if node.right:
    			Helper(node.right, level+1)
    	return Helper(root, 0)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值