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

LeetCode刷题总结:二叉树

    • 1、经典代码段
      • 1.1、建立二叉树
      • 1.2、遍历二叉树
        • 1.2.1、层次遍历
        • 1.2.2、先序遍历
        • 1.2.3、中序遍历
        • 1.2.4、后序遍历
      • 1.3、重构二叉树
    • 2、总结

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、总结

你可能感兴趣的:(数据结构与算法,leetcode,二叉树)