数据结构-树和二叉树
正文
- 树
- 二叉树
树
树是一种可以递归定义的数据结构,例如目录结构
树是由n个节点组成的集合:如果n=0,那么就是一颗空树;如果n>0,那么存在1个节点作为树的根节点,其他节点可以分为m个集合,每个集合本身又是一颗树。
一些基本概念:
根节点:根结点为第1层,例如A
叶子节点:例如B、H、P等
树的高度(或深度):是树中结点的最大层数。图中树的高度为4,即有4层
树的度:树中一个结点的孩子个数称为该结点的度,树中结点的最大度数称为树的度,上图的度为6(第二层)
二叉树
「二叉树 Binary Tree」是每个节点最多有两个子树的树结构,即二叉树中不存在度大于二的节点。并且,二叉树的子树有左右之分,其次序不能颠倒。
满二叉树:一个二叉树,如果每一个层的结点数都达到最大值,则这个二叉树就是满二叉树
完全二叉树:叶节点只能出现在最下层和次下层,并且最下面一层的结点都集中在该层最左边的若干位置的二叉树。
二叉树存储方式:
- 链式存储
- 顺序存储(堆排序已经说明)
二叉树链式存储:二叉树的链式存储:将二叉树的节点定义为一个对象,节点之间通过类似链表的链接方式来连接。
class BiTreeNode: def __init__(self, data): self.data = data self.lchild = None # 左孩子 self.rchild = None # 右孩子
二叉树遍历方式:
- 前序遍历: EACBDGF
- 中序遍历: ABCDEGF
- 后序遍历: BDCAFGE
- 层次遍历: EAGCFBD
from collections import deque class BiTreeNode: def __init__(self, data): self.data = data self.lchild = None self.rchild = None # 根据上图创建对应的数 a = BiTreeNode("A") b = BiTreeNode("B") c = BiTreeNode("C") d = BiTreeNode("D") e = BiTreeNode("E") f = BiTreeNode("F") g = BiTreeNode("G") e.lchild = a e.rchild = g a.rchild = c c.lchild = b c.rchild = d g.rchild = f root = e # 根节点 # 前序遍历 def pre_order(root): if root: print(root.data, end=",") pre_order(root.lchild) pre_order(root.rchild) pre_order(root) # EACBDGF print(" ") # 中序遍历 def in_order(root): if root: in_order(root.lchild) print(root.data, end=",") in_order(root.rchild) in_order(root) # ABCDEGF print(" ") # 后序遍历 def post_order(root): if root: post_order(root.lchild) post_order(root.rchild) print(root.data, end=",") post_order(root) # BDCAFGE print(" ") # 层次遍历 def level_order(root): queue = deque() # 创建一个队列 queue.append(root) while len(queue) > 0: # 只要队不空 node = queue.popleft() # 出队 print(node.data, end=",") # 打印 if node.lchild: # 如果node的左孩子有 queue.append(node.lchild) # 那么就进队 if node.rchild: queue.append(node.rchild) level_order(root) # EAGCFBD
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· winform 绘制太阳,地球,月球 运作规律
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
· 上周热点回顾(3.3-3.9)
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· AI 智能体引爆开源社区「GitHub 热点速览」