#include <stdio.h>
#include <stdlib.h>
typedef struct BstNode {
int data;
struct BstNode* left;
struct BstNode* right;
} BstNode;
typedef BstNode* BstNodePtr;
typedef BstNode** BstNodePtrPtr;
void Insert(BstNodePtrPtr root, int data);
BstNodePtr createNewNode(int data);
int Search(BstNodePtr root, int data);
void main() {
BstNodePtr root = NULL;
Insert(&root, 15);
Insert(&root, 10);
Insert(&root, 20);
if( Search(root, 15) ) {
printf("%s", "Found");
} else {
printf("%s", "Not found");
}
}
BstNodePtr createNewNode(int data) {
BstNodePtr newNode = malloc(sizeof(BstNode));
newNode->data = data;
newNode->left = NULL;
newNode->right = NULL;
return newNode;
}
void Insert(BstNodePtrPtr root, int data) {
if((*root) == NULL) {
(*root) = createNewNode(data);
}
else if (data <= (*root)->data) {
Insert(&((*root)->left), data);
}
else {
Insert(&((*root)->right), data);
}
}
int Search(BstNodePtr root, int data) {
if(root = NULL) return 0;
else if(root->data == data) return 1;
else if(data <= root->data) return Search(root->left, data);
else return Search(root->right, data);
}
如果在 bst 中找到或未找到某个值,我想打印“找到”或“未找到”,但此代码不打印任何内容。编译时我没有收到错误或警告。我无法调试它,因为在调试 dev c++ 时突然关闭。我在调试另一个代码时没有遇到这样的问题。
最佳答案
在函数 Search(BstNodePtr root, int data) 中,与 NULL 进行比较时,您仅放置了“=”符号而不是“==”
int Search(BstNodePtr root, int data) {
if(root == NULL) return 0;
else if(root->data == data) return 1;
else if(data <= root->data) return Search(root->left, data);
else return Search(root->right, data);
}
关于C 在 BST 中搜索元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58782271/