0
点赞
收藏
分享

微信扫一扫

Python版算法复习笔记(二):二叉树

杏花疏影1 2022-03-11 阅读 72
算法python

二叉树理论基础

  • 二叉树的主要形式:
    1)无数值的二叉树:满二叉树和完全二叉树
    2)有数值的二叉树:二叉搜索树和平衡二叉搜索树(AVL树)
  • 二叉树的存储方式:
    1)链式存储
    2)顺序存储–用数组的方式存储二叉树:
    设父节点在数组中的下标为i,则左孩子的下标为2i+1,右孩子的下标为2i+2

二叉树遍历方式

  • 二叉树的遍历方式:
    1)深度优先(先往深处走,遇到叶子节点再往回走)
# 三种遍历存在一个统一的方法实现迭代
#下面以中序遍历为例
#先确认遍历顺序,此时为 左中右

helper=[] #定义辅助栈
results=[] #初始化输出列表
helper=[root] #root为根节点

while helper:
   tmp=helper.pop()
   if tmp:  #按照遍历顺序的反顺序推入栈,注意:中节点后要推入一个空节点到辅助栈中
   	helper.append(tmp.right)
   	helper.append(tmp)
   	helper.append(None) #在中节点后推入空节点到辅助栈中
   	helper.append(tmp.left)
   else: 
   	tmp=helper.pop()
   	result.append(tmp.val)
   	
return results

前序和中序可以唯一确定一棵二叉树
后序和中序可以唯一确定一棵二叉树

2)广度优先

  • 二叉树节点的定义(python版):
class TreeNode:
	def __init__(self, value):
		self.value=value
		self.left=None
		self.right=None

解题思路

  • 递归三要素:
    ①确定递归函数的参数和返回值
    ②确定终止条件
    ③确定单层逻辑

  • 二叉树的深度与高度
    二叉树节点高度:从该节点到叶子节点的最长简单路径上的节点个数 (从底向上,后序)
    二叉树节点深度:从根节点到该节点的最长简单路径上的节点个数 (从上到下,先序)

  • 计算完全二叉树的节点数
    分两种情况:
    1.完全二叉树为满二叉树:节点数= 2 树 深 度 2^{树深度} 2 -1
    2.最后一层叶子节点不满:分别递归左右孩子,递归到某深度一定会有左孩子或有孩子是满二叉树
  • 对称二叉树–使用后序遍历思路
    解决方案:递归法 fun(left,right) / 迭代法 用辅助队列or辅助栈

  • 统计二叉树的所有路径
    从上到下遍历路径 --> 前序遍历(递归/迭代)
    所有路径 --> 回溯

  • 二叉搜索树
    注意题目中给定条件:是否有重复值,一般情况下没有重复值(严格大于/小于)

  • 迭代法中,一般一起操作两个树都是使用队列模拟类似层序遍历,同时处理两个树节点

  • 完全二叉树一定是平衡二叉树

  • 将二叉搜索树转换为累加树,相当于反中序遍历

代码随想录-二叉树总结篇

举报

相关推荐

0 条评论