刷题篇--翻转二叉树

翻转二叉树

leetcode 226题,翻转二叉树。本文使用递归和非递归两种方法解体。从这些题目中可以看出,树的问题,往往可以递归和非递归两种方式完成,并且和其深度遍历、广度遍历相关。

1.递归
def invertTree(root):
	if root is None: 
		return root                 #递归必有终止条件
	root.left, root.right = root.right, root.left
	self.invertTree(root.left)      #左右子树分别翻转,递归下去
	self.invertTree(root.right) 
	return root

从递归来看,其就是不断递归左右子树。

2.非递归

非递归方法可以从树的广度优先遍历入手,每一层的节点分别交换左右节点。

def invertTree(root):
	if root is None: return root
	queue = [root]
	
	while queue:
		temp = []
		for node in queue:
			node.left, node.right = node.right, node.left
			if node.left:
				temp.append(node.left)
			if node.right:
				temp.append(node.right)
		queue = temp
	return root
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值