用c++语言创造一个二叉查找树
时间: 2024-05-12 14:18:19 浏览: 61
好的,下面是用 C 语言实现的二叉查找树:
```
#include<stdio.h>
#include<stdlib.h>
//定义二叉树结构体
struct BST_node {
int key;
struct BST_node* left_child;
struct BST_node* right_child;
};
//创建新节点
struct BST_node* create_node(int key) {
struct BST_node* node = (struct BST_node*) malloc(sizeof(struct BST_node));
node->key = key;
node->left_child = NULL;
node->right_child = NULL;
return node;
}
//插入节点
struct BST_node* insert_node(struct BST_node* root, int key) {
//若根节点为空,创建一个新节点
if (root == NULL) {
return create_node(key);
}
//若key较小,向左子树插入节点
if (key < root->key) {
root->left_child = insert_node(root->left_child, key);
}
//若key较大,向右子树插入节点
else if (key > root->key) {
root->right_child = insert_node(root->right_child, key);
}
return root;
}
//查找节点
struct BST_node* search_node(struct BST_node* root, int key) {
if (root == NULL || root->key == key) {
return root;
}
if (key < root->key) {
return search_node(root->left_child, key);
}
else {
return search_node(root->right_child, key);
}
}
//遍历二叉树(中序遍历)
void inorder_traversal(struct BST_node* root) {
if (root != NULL) {
inorder_traversal(root->left_child);
printf("%d ", root->key);
inorder_traversal(root->right_child);
}
}
int main() {
struct BST_node* root = NULL;
int arr[] = {5, 2, 7, 1, 9};
int n = sizeof(arr) / sizeof(arr[0]);
for (int i = 0; i < n; i++) {
root = insert_node(root, arr[i]);
}
printf("Inorder traversal of the binary search tree is: ");
inorder_traversal(root);
int search_key = 7;
struct BST_node* search_result = search_node(root, search_key);
if (search_result != NULL) {
printf("\n%d is present in the binary search tree", search_key);
}
else {
printf("\n%d is not present in the binary search tree", search_key);
}
return 0;
}
```
这是一个基本的二叉查找树实现,包括创建新节点、插入节点、查找节点和遍历二叉树等操作。在主函数中,我们先创建了一个空的二叉查找树,并插入了一些元素。然后,通过中序遍历输出了整个二叉查找树的所有节点。最后,我们查找了树中是否存在关键字为7的节点,并输出了查找结果。
阅读全文