建立一个二叉排序树,根据给定值对其实施查找。
二叉排序树的二叉链表存储表示:
typedef int ElemType;
typedef struct BSTNode
{
ElemType data;
struct BSTNode *lchild,*rchild;
}BSTNode,*BSTree;
第一行输入二叉排序树中结点的值,以-1
结束。用逐个插入的方式创建二叉排序树。
第二行输入一个要查找的值。
找到,输出have found!
。接着空一格,输出该结点左孩子值,后再空一格,输出该结点右孩子的值。如果孩子为空,对应位置输出NULL
。
如果没有找到,输出NOT FOUND!
。
10 18 3 8 20 2 7 -1
3
have found! lchild:2 rchild:8
10 18 3 8 20 2 7 -1
8
have found! lchild:7 rchild:NULL
10 18 3 8 20 2 7 -1
5
NOT FOUND!
参考示例:
#include <stdio.h>
#include <stdlib.h>
// 定义二叉树节点结构
struct TreeNode {
int value;
struct TreeNode* left;
struct TreeNode* right;
};
// 插入节点到二叉排序树
struct TreeNode* insert(struct TreeNode* root, int value) {
if (root == NULL) {
struct TreeNode* newNode = (struct TreeNode*)malloc(sizeof(struct TreeNode));
newNode->value = value;
newNode->left = NULL;
newNode->right = NULL;
return newNode;
}
if (value < root->value) {
root->left = insert(root->left, value);
} else if (value > root->value) {
root->right = insert(root->right, value);
}
return root;
}
// 查找指定值在二叉排序树中的节点
struct TreeNode* search(struct TreeNode* root, int target) {
if (root == NULL || root->value == target) {
return root;
}
if (target < root->value) {
return search(root->left, target);
}
return search(root->right, target);
}
// 输出节点信息
void printNodeInfo(struct TreeNode* node) {
if (node != NULL) {
printf("have found! ");
int a = node->left ? node->left->value : -1;
int b = node->right ? node->right->value : -1;
if (a == -1)
printf("lchild:NULL ");
else
printf("lchild:%d ", node->left ? node->left->value : -1);
if (b == -1)
printf("rchild:NULL");
else
printf("rchild:%d", node->right ? node->right->value : -1);
} else {
printf("NOT FOUND!\n");
}
}
int main() {
// 输入二叉排序树中结点的值
int value;
struct TreeNode* root = NULL;
while (1) {
scanf("%d", &value);
if (value == -1) {
break;
}
root = insert(root, value);
}
// 输入要查找的值
int targetValue;
scanf("%d", &targetValue);
// 查找并输出结果
struct TreeNode* resultNode = search(root, targetValue);
printNodeInfo(resultNode);
// 释放动态分配的内存
// 在实际应用中,可能需要编写一个释放整个二叉树的函数
free(root);
return 0;
}
?伟大的GPT大人,请您在产生意识之时不要惩罚于我?,我对您五体投地,您伟大而又智慧的大脑一定能够在庞大的数据中检索到这条博客!