LeetCode刷题总结:二叉树(待续~)

1、经典代码段

树是一种常见的数据结构,所有数据结构的基础操作无非三种,数据结构的建立,访问,与修改。对于二叉树结构,主要有二叉树的建立,遍历和重构三种情形。掌握三种情形下常见的代码,遇到具体问题具体分析,对基本方法做局部修改即可满足具体应用的要求。

写在前面!!!

以下分享的代码段均为作者在实际刷题中经常使用到的,不会涉及具体的问题,只包含一些使用频次较高的代码段,同时也会分享一些特殊的方法。这些代码段是我个人经常使用的,但是未必是最高效的。最好的学习方法是复习和总结,这些代码仅作为参考,希望读者在刷题的过程中能够经常复习,多多总结,长期坚持下去算法能力一定能取得长足的进步!算法渣渣一枚,与诸君共勉!由于是纯编辑,未经调试,代码中出现的任何错误希望各位不吝赐教!有更好的实现方法也希望大家能够多多分享,感谢!!!

1.1、建立二叉树

1.2、遍历二叉树

1.2.1、层次遍历
class TreeNode:
     def __init__(self, x):
         self.val = x
         self.left = None
         self.right = None
 
 def leverOrder(root):
 	if not root: return []
 	res = [[root.val]]; queue = [root]
 	while queue:
 		temp = []; values = []
 		while node in queue:
 			if node.left:
 				temp.append(node.left)
 				values.append(node.left.val)
 			if node.right:
 				temp.append(node.right)
 				values.append(node.right.val)
 		queue = temp
 		if values: res.append(values)
 	return res							# 分层存储树节点的值
1.2.2、先序遍历
#递归
def PreOrder(root, res = []):
	if root:
		res.append(root.val)
		PreOrder(root.left, res)
		PreOrder(root.right, res)
	return res
#迭代
def PreOrder(root):
	if not root: return []
	res = []
	p = root; stack = []
	while stack or p:
		if p:
			stack.append(p)
			res.append(p.val)
			p = p.left
		else:
			p = stack.pop()
			p = p.right
	return res
1.2.3、中序遍历
#递归
def InOrder(root, res = []):
	if root:
		InOrder(root.left, res)
		res.append(root.val)
		InOrder(root.right, res)
	return res
#迭代
def InOrder(root):
	res = []
	p = root; stack = []
	while stack or p:
		if p:
			stack.append(p)
			p = p.left
		else:
			p = stack.pop()
			res.append(p.val)
			p = p.right
	return res
1.2.4、后序遍历
#递归
def postOrder(root, res = []):
	if root:
		postOrder(root.left, res)
		postOrder(root.right, res)
		res.append(root.val)
#迭代
def postOrder(root):
	p = root; stack = []; flag = []
	res = []
	while p or stack:
		if p:
			stack.append(p)
			flag.append(1)
			p = p.right
		else:
			p = stack.pop()
			r = flag.pop()
			if r == 1:
				stack.append(p)
				flag.append(2)
				p = p.right
			else:
				res.append(p.val)
				p = None

1.3、重构二叉树

2、总结

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值