用 c语言写二叉排序树并对其进行查找 如 在指针pTree所指的二叉排序树中递归查找关键字为key的元素, 若查找成功,则返回指向该元素节点的指针,否则返回NULL 参数:(BSTree pTree, ElemType key) 二叉树的指针与查找关键字 返回值: BSTree 二叉树的指针
时间: 2024-03-21 20:44:19 浏览: 83
好的,下面是用 C 语言实现二叉排序树并对其进行查找的代码:
```
typedef int ElemType;
typedef struct BSTNode {
ElemType data;
struct BSTNode* left;
struct BSTNode* right;
} BSTNode, *BSTree;
BSTree search(BSTree pTree, ElemType key) {
if (pTree == NULL) {
// 如果树为空,则查找失败,返回 NULL
return NULL;
} else if (key == pTree->data) {
// 如果根节点的值等于关键字,就返回根节点指针
return pTree;
} else if (key < pTree->data) {
// 如果关键字小于根节点的值,就在左子树中查找
return search(pTree->left, key);
} else {
// 如果关键字大于根节点的值,就在右子树中查找
return search(pTree->right, key);
}
}
void insert(BSTree* pTree, ElemType key) {
if (*pTree == NULL) {
// 如果树为空,则创建一个新节点
BSTNode* newNode = (BSTNode*) malloc(sizeof(BSTNode));
newNode->data = key;
newNode->left = newNode->right = NULL;
*pTree = newNode;
} else if (key < (*pTree)->data) {
// 如果要插入的值小于根节点的值,就在左子树中插入
insert(&((*pTree)->left), key);
} else if (key > (*pTree)->data) {
// 如果要插入的值大于根节点的值,就在右子树中插入
insert(&((*pTree)->right), key);
}
}
```
这里先定义了一个 BSTNode 结构体表示二叉排序树的节点,其中包含节点的数据和左右子树的指针。然后定义了一个 BSTree 类型表示二叉排序树的指针。
在 search 函数中,首先判断树是否为空,如果为空就返回 NULL,表示查找失败。如果根节点的值等于关键字,就返回根节点指针。如果关键字小于根节点的值,就在左子树中查找;如果关键字大于根节点的值,就在右子树中查找。
在 insert 函数中,采用了递归的方式实现了二叉排序树的插入操作,具体实现方式与前面的代码相同。
最后,我们可以通过调用 search 函数来查找二叉排序树中是否存在某个节点,并返回它的指针。如果返回 NULL,表示查找失败,否则表示查找成功。
阅读全文