C++二叉树:数据的“家族树”与高效检索的奥秘
开篇小故事:图书馆的“智能目录”
想象一座古老的图书馆,藏书百万,却能在几秒内找到任意一本书。
秘密在于它的“智能目录系统”——一本巨大的家族树状手册:
- 每本书按主题分成左右两支,左分支是更细分的子类,右分支是相关主题。
- 管理员只需逐层选择“左”或“右”,就能快速定位目标。
这棵“家族树”正是**二叉树(Binary Tree)**的现实化身!在C++中,二叉树以其层次化结构和高效操作,成为数据组织与检索的利器。
一、二叉树是什么?
二叉树是一种树形数据结构,每个节点最多有两个子节点:
- 左子节点:通常存储比父节点小的值(或按业务规则定义)。
- 右子节点:通常存储比父节点大的值。
- 根节点:树的顶端节点,所有操作的起点。
struct TreeNode {
int val;
TreeNode* left;
TreeNode* right;
TreeNode(int x) : val(x), left(nullptr), right(nullptr) {
}
};
二叉树的核心特性
- 层次结构:数据按规则分层,便于快速检索。
- 递归定义:每个子树也是二叉树,适合递归处理。
- 高效操作:理想情况下,增删查改时间复杂度为O(log n)。
二、二叉树的“四种遍历术”
遍历是二叉树的核心操作,分为四种方式:
1. 前序遍历(根 → 左 → 右)
void preorder(TreeNode* root) {
if (!root) return;
cout << root->val << " "; // 先访问根
preorder(root->left);
preorder(root->right);
}
// 输出顺序:1 2 4 5 3
2. 中序遍历(左 → 根 → 右)
void inorder(TreeNode* root) {
if (!root) return;
inorder