1. 二叉树基础概念与存储结构
二叉树是数据结构中最基础的树形结构之一,每个节点最多有两个子节点,分别称为左子节点和右子节点。在实际应用中,二叉树常被用于实现高效的数据查找和排序算法,比如二叉搜索树和堆结构。
二叉树的存储结构主要有两种:顺序存储和链式存储。顺序存储使用数组来表示二叉树,对于完全二叉树来说非常高效,因为可以方便地通过下标计算父子节点的位置关系。但对于一般的二叉树,顺序存储可能会浪费大量空间。链式存储则更为灵活,每个节点包含数据域和两个指针域,分别指向左右子节点。
在C++中,我们通常使用结构体来定义二叉树的节点:
template<typename T>
struct TreeNode {
T data;
TreeNode* left;
TreeNode* right;
TreeNode(T val) : data(val), left(nullptr), right(nullptr) {}
};
这种链式存储结构可以动态地创建和销毁节点,内存利用率高,且操作灵活。在实际项目中,我经常使用这种结构来实现各种二叉树算法。
2. 递归遍历算法详解
递归是解决二叉树问题的天然工具,因为二叉树本身就是递归定义的数据结构。二叉树的三种基本遍历方式——前序、中序和后序遍历——都可以用递归简洁地实现。
前序遍历的顺序是"根-左-右",常用于创建树的副本或序列化树结构。下面是前序遍历的递归实现:
void preOrder(TreeNode* root) {
if (!root) return;
cout << root->data << " "; // 访问根节点
preOrder(root->left); // 遍历左子树
preOrder(root->right); // 遍历右子树
}
中序遍历


9万+

被折叠的 条评论
为什么被折叠?



