C 在 BST 中搜索元素

标签 c

#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/

相关文章:

c - 以下C代码有什么问题

将 4 字节 ip 地址转换为标准的点分十进制表示法

c - 使用 dup 后恢复标准输出

c - 没有进程区域设置的 Gettext

c - 如何告诉 C 编译器不要重叠我的字符串

c++ - 带分号的 while 循环内的指针递减与不带分号的比较

c - 程序输出没有意义

c - 数字中出现了多少次数字 (Number-ception) C

c - 如何使该代码算法高效?使用该算法后的代码将是什么?如何避免该程序超出时间限制?

c - 如何显示 float