用C语言实现二叉查找
时间: 2023-07-18 16:22:26 浏览: 102
下面是用C语言实现二叉查找的代码示例:
```c
#include <stdio.h>
#include <stdlib.h>
// 二叉查找树结构体
typedef struct BST {
int val;
struct BST *left;
struct BST *right;
} BST;
// 创建新节点
BST* createNode(int val) {
BST *node = (BST*)malloc(sizeof(BST));
node->val = val;
node->left = NULL;
node->right = NULL;
return node;
}
// 插入节点
BST* insertNode(BST *root, int val) {
if (root == NULL) {
return createNode(val);
}
if (val < root->val) {
root->left = insertNode(root->left, val);
} else if (val > root->val) {
root->right = insertNode(root->right, val);
}
return root;
}
// 查找节点
BST* searchNode(BST *root, int val) {
if (root == NULL || root->val == val) {
return root;
}
if (val < root->val) {
return searchNode(root->left, val);
} else {
return searchNode(root->right, val);
}
}
// 测试代码
int main() {
BST *root = NULL;
root = insertNode(root, 4);
insertNode(root, 2);
insertNode(root, 6);
insertNode(root, 1);
insertNode(root, 3);
insertNode(root, 5);
insertNode(root, 7);
int val = 5;
BST *node = searchNode(root, val);
if (node != NULL) {
printf("找到了值为%d的节点\n", val);
} else {
printf("没有找到值为%d的节点\n", val);
}
return 0;
}
```
在上面的代码中,我们先定义了一个二叉查找树结构体`BST`,包含一个整数`val`和两个指向左右子节点的指针`left`和`right`。然后我们定义了两个函数`createNode`和`insertNode`,分别用于创建新节点和将新节点插入到二叉查找树中。在`createNode`函数中,我们先动态分配内存,然后将节点的值赋值为传入的参数,左右子节点指针赋值为NULL。在`insertNode`函数中,我们首先判断二叉查找树是否为空,如果是则直接创建新节点。否则,判断要插入的节点值与当前节点值的大小关系,如果小于当前节点值,则递归插入到左子树中,否则插入到右子树中。最终返回根节点。
接下来,我们定义了一个`searchNode`函数用于查找节点。在函数中,我们先判断当前节点是否为空或者是否等于要查找的值,如果是则返回当前节点。否则,判断要查找的值与当前节点值的大小关系,如果小于当前节点值,则递归查找左子树,否则递归查找右子树。最终返回找到的节点或者NULL。
在`main`函数中,我们先创建一个空的二叉查找树,然后依次将数字4、2、6、1、3、5、7插入到二叉查找树中。最后,我们查找数字5是否在二叉查找树中,如果找到了则输出“找到了值为5的节点”,否则输出“没有找到值为5的节点”。
阅读全文