二叉搜索树 (BST) 节点插入、查找、删除、获取最大值、最小值和中序遍历排序等功能
二叉搜索树 (BST) 实现总结
本程序实现了一个简单的二叉搜索树 (BST),支持节点插入、查找、删除、获取最大值、最小值和中序遍历排序等功能。以下是各部分的详细说明。
数据结构
节点定义
struct BinTreeNode {int data; // 节点存储的数据struct BinTreeNode* left; // 指向左子节点的指针struct BinTreeNode* right; // 指向右子节点的指针
};
函数定义
插入函数
void insert(BinTreeNode* &t, int x);
- 功能: 将新值
x
插入到二叉搜索树中。 - 逻辑:
-
- 如果当前节点
t
为NULL
,则创建新节点并赋值。 - 否则根据
x
与t->data
的比较,递归地决定插入左子树或右子树。
- 如果当前节点
查找最小值和最大值
int Min(BinTreeNode* bst);
int Max(BinTreeNode* bst);
- 功能: 返回二叉搜索树中最小值和最大值。
- 逻辑:
-
- 最小值通过一直遍历左子树获取。
- 最大值通过一直遍历右子树获取。
中序遍历排序
void sort(BinTreeNode* t);
- 功能: 打印二叉搜索树的节点值,按升序排列。
- 逻辑:
-
- 递归访问左子树,打印当前节点,再递归访问右子树。
查询 BST
BinTreeNode* searchBST(BinTreeNode* t, int key);
- 功能: 查询树中是否存在值为
key
的节点。 - 逻辑:
-
- 根据
key
的值与当前节点的比较,决定递归访问左子树或右子树。
- 根据
删除节点
bool removeBST(BinTreeNode* t, int x);
- 功能: 删除值为
x
的节点。 - 逻辑:
-
- 递归查找节点
t
。 - 一旦找到,判断其子节点情况并处理:
- 递归查找节点
-
-
- 叶子节点: 直接释放。
- 单子节点: 将当前节点替换为其唯一的子节点并释放。
- 双子节点: 找到左子树的最大值,替换当前节点数据,并删除该最大节点。
-
主函数
int main() {int ar[] = {53, 17, 78, 9, 45, 65, 87, 23};int n = sizeof(ar) / sizeof(ar[0]);BinTreeNode* bst = NULL;for (int i = 0; i < n; i++) {insert(bst, ar[i]); // 插入数组中的每个元素}removeBST(bst, 53); // 删除值为 53 的节点return 0;
}
- 功能: 创建一个二叉搜索树并插入一组数据,然后删除指定节点。
- 逻辑:
-
- 使用数组
ar
初始化树,插入每个元素。 - 调用
removeBST
删除值为 53 的节点。
- 使用数组
可视化编译器
可视化编辑器 数据结构与算法 | 图码