二叉树
定义
二叉树是一种特定类型的树数据结构,每个节点最多有两个子节点,通常称为左子节点和右子节点。
它是一种递归定义的数据结构:
- 空树:
- 非空树: 由一个根节点和两个不相交的二叉树(左子树和右子树)组成。
性质
- 节点数:
- 如果二叉树的高度为h(根节点的高度为0),则最多有 2h+1−1 个节点。
- 第i层最多有 2i个节点(i >= 0)
- 叶子节点数:
对于任何非空二叉树,如果叶子节点数为n0,度为2的节点数为n2,则n0 = n2 + 1。 - 完全二叉树:
如果二叉树的所有叶子节点都在最后一层或倒数第二层,并且最后一层的叶子节点从左到右连续排列,则称为完全二叉树。
二叉树的遍历
二叉树的遍历是指按照某种顺序访问树中的每个节点。常见的遍历方法有三种:前序遍历、中序遍历和后序遍历。
- 前序遍历(Pre-order Traversal):
- 访问顺序为:根节点 -> 左子树 -> 右子树。
- 递归实现:
// java void preOrder(TreeNode node) { if (node == null) return; System.out.print(node.data + " "); // 访问根节点 preOrder(node.left); // 遍历左子树 preOrder(node.right); // 遍历右子树 }
- 中序遍历(In-order Traversal):
- 访问顺序为:左子树 -> 根节点 -> 右子树。
- 递归实现:
// java void inOrder(TreeNode node) { if (node == null) return; inOrder(node.left); // 遍历左子树 System.out.print(node.data + " "); // 访问根节点 inOrder(node.right); // 遍历右子树 }
- 后序遍历(Post-order Traversal):
- 访问顺序为:左子树 -> 右子树 -> 根节点。
- 递归实现:
//java void postOrder(TreeNode node) { if (node == null) return; postOrder(node.left); // 遍历左子树 postOrder(node.right); // 遍历右子树 System.out.print(node.data + " "); // 访问根节点 }
二叉树的实现
二叉树通常通过节点类来实现,每个节点包含数据部分和指向左右子节点的指针。
//java
class TreeNode {
int data;
TreeNode left;
TreeNode right;
TreeNode(int data) {
this.data = data;
this.left = null;
this.right = null;
}
}
二叉树的优缺点
- 优点:
具有丰富的结构,可以表示各种层次关系。
支持高效的插入、删除和查找操作(例如在二叉搜索树中)。 - 缺点:
实现相对复杂,需要更多的内存来存储指针。
不平衡的二叉树可能导致退化,影响性能。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· SQL Server 2025 AI相关能力初探
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南