no_russion 2019-03-10 23:53 采纳率: 33.3%
浏览 371
已采纳

大佬们帮忙看看这个二叉搜索树哪错了

先创立一个符合二叉搜索树的树,再进行查找key,找到便使指针p指向找到的位置,找不到便返回最后的位置,不知道哪错了;

#include<stdio.h>
#include<stdlib.h>

typedef char elemtype;

enum {FALSE,TRUE};

typedef struct tree
{
    elemtype data;
    struct tree *lchild;
    struct tree *rchild;
}BiTNode,*BiTree;

void CreatBiTree(BiTree* fm)
{
    fm=(BiTree*)malloc(sizeof(BiTNode));
    scanf("%c",&(*fm)->data);
    //getchar();
    if((*fm)->data!=' ')//以空格表示没有子节点
    {
    CreatBiTree(&(*fm)->lchild);
    CreatBiTree(&(*fm)->rchild);
    }
}

int SearchBiTree(BiTree Node,int key,BiTNode *f,BiTNode *p)
{
    if(!Node)
    {
        *p=*f;
        return FALSE;
    }

    if(key==Node->data)
    {
        *p=*Node;
        return TRUE;
    }

    if(key<Node->data)
    {
        SearchBiTree(Node->lchild,key,Node,p);
    }

    if(key>Node->data)
    {
        SearchBiTree(Node->rchild,key,Node,p);
    }
}

int main()
{
    printf("以前序遍历创建二叉树并使其符合二叉搜索树的特征\n"); 
    BiTree root;
    CreatBiTree(&root);
    elemtype key;
    printf("输入需要搜索的值\n");
    scanf("%c",&key);
    BiTree f,p;
    f=(BiTree)malloc(sizeof(BiTNode));
    p=(BiTree)malloc(sizeof(BiTNode));
    f=NULL;
    SearchBiTree(root,key,f,p);

    return 0;
}
  • 写回答

1条回答 默认 最新

  • threenewbee 2019-03-11 00:10
    关注

    不往下看了,void CreatBiTree(BiTree* fm) 这里就不对,你主程序里定义的root,在这个函数里指向分配的地址,但是不会作用到主程序root上
    导致你的root是野指针,

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

悬赏问题

  • ¥15 如何在scanpy上做差异基因和通路富集?
  • ¥20 关于#硬件工程#的问题,请各位专家解答!
  • ¥15 关于#matlab#的问题:期望的系统闭环传递函数为G(s)=wn^2/s^2+2¢wn+wn^2阻尼系数¢=0.707,使系统具有较小的超调量
  • ¥15 FLUENT如何实现在堆积颗粒的上表面加载高斯热源
  • ¥30 截图中的mathematics程序转换成matlab
  • ¥15 动力学代码报错,维度不匹配
  • ¥15 Power query添加列问题
  • ¥50 Kubernetes&Fission&Eleasticsearch
  • ¥15 報錯:Person is not mapped,如何解決?
  • ¥15 c++头文件不能识别CDialog