跟晶振作斗争 2022-05-17 16:21 采纳率: 81.8%
浏览 7
已结题

二叉排序树没有结果出来

问题遇到的现象和发生背景

没有输出
为什么struct BiNode *s=SearchBST(root,k)的地址显示为0x0

问题相关代码,请勿粘贴截图
#ifndef __Search_H

#define __Search_H

using namespace std;

const int MaxSize=10;

template<class T>
struct BiNode
{
    T data;
    struct BiNode *lchild;
    struct BiNode *rchild;
};

template<class T>
class BiSortTree
{
private:
    struct BiNode<T> *root;
    void InsertBST(struct BiNode<T> *bt,struct BiNode<T> *s);
    void DeleteBST(struct BiNode<T> *bt,struct BiNode<T> *s);
    struct BiNode<T> *SearchBST(struct BiNode<T> *bt,T k);
    void Release(struct BiNode<T> *bt);
public:
    BiSortTree(T a[],int n);
    ~BiSortTree();
    void InsertBST(struct BiNode<T> *s);
    void SearchBST(T k);
};

template<class T>BiSortTree<T>::BiSortTree(T a[],int n)
{
    root=new struct BiNode<T>;
    root->data=a[0];
    root->lchild=NULL;
    root->rchild=NULL;
    for(int i=1;i<n;i++)
    {
        struct BiNode<T> *s=new struct BiNode<T>;
        s->data=a[i];
        s->lchild=NULL;
        s->rchild=NULL;
        InsertBST(root,s);
    }
}

template<class T>void BiSortTree<T>::Release(struct BiNode<T> *bt)
{
    if(bt==NULL)return;
    else
    {
        Release(bt->lchild);
        Release(bt->rchild);
        delete bt;
    }
}

template<class T>BiSortTree<T>::~BiSortTree()
{
    Release(root);
}

template<class T>void BiSortTree<T>::InsertBST(struct BiNode<T> *bt,struct BiNode<T> *s)
{
    if(bt==NULL)
    {
        bt=s;
    }
    else
    {
        if(s->data<bt->data)
            InsertBST(bt->lchild,s);
        else
            InsertBST(bt->rchild,s);
    }
}

template<class T>void BiSortTree<T>::InsertBST(struct BiNode<T> *s)
{
    InsertBST(root,s);
}

template<class T>struct BiNode<T> *BiSortTree<T>::SearchBST(struct BiNode<T> *bt,T k)
{
    if(bt==NULL)
        return NULL;
    else
    {
        if(bt->data==k)
            return bt;
        else
        {
            if(k<bt->data)
            {
                return SearchBST(bt->lchild,k);
            }
            else
            {
                 return SearchBST(bt->rchild,k);
            }
        }
    }
}

template<class T>void BiSortTree<T>::SearchBST(T k)
{
    struct BiNode<T> *s=SearchBST(root,k);
    if(s->lchild==NULL)
        cout<<"搜索的值的左子树为空";
    else
        cout<<s->lchild->data;
}
#endif // __Search_H

#include <iostream>
#include "Search.h"

using namespace std;

int main()
{
    int a[MaxSize];
    int n,k,data1,data2;
    cin>>n;
    for(int i=0;i<n;i++)
    {
        cin>>k;
        a[i]=k;
    }
    struct BiNode<int> *s=new struct BiNode<int>;
    cin>>data1>>data2;
    s->data=data1;
    s->lchild=NULL;
    s->rchild=NULL;
    BiSortTree<int> Tree(a,n);
    Tree.InsertBST(s);
    Tree.SearchBST(data2);
    return 0;
}
运行结果及报错内容
我的解答思路和尝试过的方法
我想要达到的结果
  • 写回答

1条回答 默认 最新

  • 张十五 2022-05-17 16:48
    关注

    69行 ,没插进去呗。形参在怎么变也不会影响实参,你传的又不是引用。

    评论

报告相同问题?

问题事件

  • 已结题 (查看结题原因) 3月13日
  • 创建了问题 5月17日

悬赏问题

  • ¥15 爬虫爬取网站的一些信息
  • ¥15 关于vue2中methods使用call修改this指向的问题
  • ¥15 idea自动补全键位冲突
  • ¥15 请教一下写代码,代码好难
  • ¥15 iis10中如何阻止别人网站重定向到我的网站
  • ¥15 滑块验证码移动速度不一致问题
  • ¥15 Utunbu中vscode下cern root工作台中写的程序root的头文件无法包含
  • ¥15 麒麟V10桌面版SP1如何配置bonding
  • ¥15 Marscode IDE 如何预览新建的 HTML 文件
  • ¥15 K8S部署二进制集群过程中calico一直报错