C语言实现:构建与插入操作的二叉排序树

需积分: 31 19 下载量 8 浏览量 更新于2024-09-08 2 收藏 2KB TXT 举报
"C语言实现数据结构中的二叉排序树,包括插入操作的代码示例。" 二叉排序树(Binary Search Tree,BST),也称为二叉查找树,是一种特殊的二叉树数据结构,它的每个节点都包含一个键、一个关联的值、一个指向左子树的引用和一个指向右子树的引用。在二叉排序树中,对于任意节点,其左子树中的所有节点的键值都小于该节点的键值,而右子树中的所有节点的键值都大于该节点的键值。这种特性使得在二叉排序树中进行查找、插入和删除操作的时间复杂度可以达到O(log n)。 以下代码片段展示了如何在C语言中创建和插入元素到二叉排序树: ```c #include<stdio.h> #include<stdlib.h> #define max 100 typedef struct BiNode { int data; // 键值 struct BiNode* lchild; // 左子节点 struct BiNode* rchild; // 右子节点 } BiNode, *BiTree; // 未给出的CreatBST函数是创建一个有序数组的二叉排序树,这里仅提供插入函数 // 插入函数BTInsert,将键值k插入到二叉排序树BT中 int BTInsert(BiTree BT, int k) { BiTree r, s, pre; r = (BiTree)malloc(sizeof(BiNode)); r->data = k; r->lchild = NULL; r->rchild = NULL; if (BT == NULL) { BT = r; return 1; } pre = NULL; s = BT; while (s) { if (k == s->data) return 0; // 如果键值已存在,返回0表示插入失败 else if (k < s->data) { pre = s; s = s->lchild; } else { pre = s; s = s->rchild; } } if (k < pre->data) pre->lchild = r; else pre->rchild = r; return 1; // 返回1表示插入成功 } // CreateBST函数用于创建一个二叉排序树,但代码不完整 void CreateBST(BiTree& BT, int a[max], int n) { // ... } ``` 在`BTInsert`函数中,首先创建一个新的节点`r`,然后遍历树以找到合适的位置进行插入。如果树为空,新节点就成为根节点。否则,通过`pre`和`s`指针跟踪当前节点和前一个节点,比较新键值与当前节点键值的关系来决定向左子树还是右子树移动。当找到适当位置时,将新节点连接到前一个节点的左或右子树。 `CreateBST`函数看起来是一个创建二叉排序树的辅助函数,但代码没有给出完整实现。通常,这个函数会遍历输入数组,并对每个元素调用`BTInsert`来构建一个完整的二叉排序树。 在实际应用中,除了插入操作,还需要考虑查找、删除等操作。对于二叉排序树,查找操作可以通过递归或迭代的方式实现,时间复杂度也是O(log n)。删除操作则相对复杂,需要处理几种不同的情况,例如删除叶子节点、只有一个子节点的节点或有两个子节点的节点。 为了实现完整的二叉排序树功能,建议补充`CreateBST`函数,并实现查找和删除操作。这将使你能够全面掌握二叉排序树的数据结构及其在C语言中的实现。