二叉树基本概念
二叉树
简单概念:根节点、子树、叶子节点
父节点、兄弟节点、孩子节点(左孩子、右孩子)
满二叉树:一个二叉树所有【非叶子节点】都存在左孩子和右孩子,且所有叶子节点处于同一层级上。
完全二叉树:把满二叉树右边几个(≥0)叶子拿掉,形成的二叉树就是完全二叉树。可以看出,满二叉树也是完全二叉树。
如何存储?
- 链式存储结构(链表)
- 数组:若父节点下标是p(从0开始),则其左孩子下标是2p+1,右孩子下标是2p+2
二叉树应用
二叉查找树:在二叉树基础上增加条件:
- 若左子树不为空,则左子树节点的值均小于根节点的值;
- 若右子树不为空,则右子树节点的值均大于根节点的值;
- 左子树、右子树也是二叉查找树
这种查找方式类似二分法,查找的时间复杂度 O(logn)
,常用于排序(也叫二叉排序树)
二叉树的遍历
前序遍历、中序遍历、后序遍历、层序遍历 (前3种属于:深度优先遍历;后1种属于:广度优先遍历)
前序遍历:根节点->左子树->右子树

中序遍历:左子树->根节点->右子树

后序遍历:左子树->右子树->根节点

二叉堆
二叉堆本质上是一种完全二叉树,其根节点叫”堆顶“
- 最大堆:任何一个父节点的值,都>=它左孩子或右孩子的值
- 最小堆:任何一个父节点的值,都<=它左孩子或右孩子的值
二叉堆的自我调整:
- 插入节点:从堆的最后一个位置插入,再调整位置
- 删除节点:把堆的最后一个节点调整到被删除的节点的位置,再调整位置
- 构建二叉堆:将无序的完全二叉树调整为二叉堆,通过”上浮“或”下沉“操作
优先队列
特点:不遵循FIFO原则,分为以下情况
- 最大优先队列:总是队列中最大元素优先出队(通过最大堆实现,每次堆顶出队)
- 最小优先队列:总是队列中最小元素优先出队(最小堆)
本文来自博客园,作者:aJream,转载请记得标明出处:https://www.cnblogs.com/ajream/p/16015463.html
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· winform 绘制太阳,地球,月球 运作规律
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 上周热点回顾(3.3-3.9)
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人