vIllaInssss 2020-03-20 03:09 采纳率: 75%
浏览 120
已采纳

大神帮我看看 树的最值怎么找不到,inserBst1为什么存不了数

#include
#include
#include
typedef struct _TreeNode
{
int data;
struct _TreeNode*left;
struct _TreeNode*right;
}TreeNode;
void inserBst(TreeNode**r,int data)
{
TreeNode*t=*r;
if(*r==NULL)
{
r=(TreeNode)malloc(sizeof(TreeNode));
(*r)->data=data;
(*r)->left=(*r)->right=NULL;
}
else
{
while(1)
{
if(data>t->data)
{
if(t->right==NULL)
{
t->right=(TreeNode*)malloc(sizeof(TreeNode));
t->right->data=data;
t->right->left=t->right->right=NULL;
break;
}
t=t->right;
}
else
{
if(t->left==NULL)
{
t->left=(TreeNode*)malloc(sizeof(TreeNode));
t->left->data=data;
t->left->left=t->left->right=NULL;
break;
}
t=t->left;
}
}
}
}
void inserBst1(TreeNode**r,int data)
{
TreeNode*t=*r;;
{
if(t==NULL)
{
t=(TreeNode*)malloc(sizeof(TreeNode));
t->data=data;
t->left=t->right=NULL;
}
else
{
if(data>t->data)
inserBst1(&t->right,data);
else
inserBst1(&t->left,data);
}
}
}
void traverTree(TreeNode*r)
{
if(r)
{
printf("%d ",r->data);
traverTree(r->left);
traverTree(r->right);
// printf("\n");
}
}
TreeNode*search(TreeNode*r,int find)
{
int data=find;
while(r)
{
if(r->data==data)
return r;
else if(find>r->data)
r=r->right;
else
r=r->left;
}
return NULL;
}

TreeNode*midBst(TreeNode*r)
{
if(r)
{
while(r->left)
{
r=r->left;
}
return r;
}
return NULL;
}
/* 30
8 36

15 32 100

*/
int main()
{
TreeNode*root=NULL;
inserBst(&root,30);
inserBst(&root,8);
inserBst(&root,7);
inserBst(&root,6);
inserBst(&root,15);
inserBst(&root,36);
inserBst(&root,100);
inserBst(&root,32);

// inserBest(&root,);
traverTree(root);
printf("\n");

 TreeNode*pfind=search(root,30);
 if(pfind)
 printf("find in %d\n",pfind->data);
 else
 printf("find none");
TreeNode*mi=midBst(root);
printf("%d\n",mi->data);
return 0;

}

  • 写回答

1条回答 默认 最新

  • threenewbee 2020-03-20 09:31
    关注

    不知道你要做什么,如果你要输出最大值,把left修改为right,left是最小

    #include<stdio.h> 
    #include<string.h> 
    #include<stdlib.h>
    
    typedef struct _TreeNode
    {
        int data;
        struct _TreeNode*left;
        struct _TreeNode*right;
    }TreeNode;
    void inserBst(TreeNode**r,int data)
    {
        TreeNode*t=*r;
        if(*r==NULL)
        {
            *r=(TreeNode *)malloc(sizeof(TreeNode));
            (*r)->data=data;
            (*r)->left=(*r)->right=NULL;
        }
        else
        {
            while(1)
            {
                if(data>t->data)
                {
                    if(t->right==NULL)
                    {
                        t->right=(TreeNode*)malloc(sizeof(TreeNode));
                        t->right->data=data;
                        t->right->left=t->right->right=NULL;
                        break;
                    }
                    t=t->right; 
                }
                else
                {
                    if(t->left==NULL)
                    {
                        t->left=(TreeNode*)malloc(sizeof(TreeNode));
                        t->left->data=data;
                        t->left->left=t->left->right=NULL;
                        break;
                    }
                    t=t->left;
                }
            }
        }
    }
    void inserBst1(TreeNode**r,int data)
    {
        TreeNode*t=*r;;
        {
            if(t==NULL)
            {
                t=(TreeNode*)malloc(sizeof(TreeNode));
                t->data=data;
                t->left=t->right=NULL;
            }
            else
            {
                if(data>t->data)
                    inserBst1(&t->right,data);
                else
                    inserBst1(&t->left,data);
            }
        }
    }
    void traverTree(TreeNode*r)
    {
        if(r)
        {
            printf("%d ",r->data);
            traverTree(r->left);
            traverTree(r->right);
            // printf("\n");
        }
    }
    TreeNode*search(TreeNode*r,int find)
    {
        int data=find;
        while(r)
        {
            if(r->data==data) 
                return r;
            else if(find>r->data)
                r=r->right;
            else
                r=r->left;
        }
        return NULL;
    }
    TreeNode*midBst(TreeNode*r)
    {
        if(r)
        {
            while(r->right)
            {
                r=r->right;
            }
            return r;
        }
        return NULL;
    }
    /* 30
    8 36
    
    15 32 100
    */
    int main()
    {
        TreeNode*root=NULL;
        inserBst(&root,30);
        inserBst(&root,8);
        inserBst(&root,7);
        inserBst(&root,6);
        inserBst(&root,15);
        inserBst(&root,36);
        inserBst(&root,100);
        inserBst(&root,32);
    
        // inserBest(&root,);
        traverTree(root);
        printf("\n");
        TreeNode*pfind=search(root,30);
        if(pfind)
            printf("find in %d\n",pfind->data);
        else
            printf("find none");
        TreeNode*mi=midBst(root);
        printf("%d\n",mi->data);
        return 0;
    }
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

悬赏问题

  • ¥15 如何绘制动力学系统的相图
  • ¥15 对接wps接口实现获取元数据
  • ¥20 给自己本科IT专业毕业的妹m找个实习工作
  • ¥15 用友U8:向一个无法连接的网络尝试了一个套接字操作,如何解决?
  • ¥30 我的代码按理说完成了模型的搭建、训练、验证测试等工作(标签-网络|关键词-变化检测)
  • ¥50 mac mini外接显示器 画质字体模糊
  • ¥15 TLS1.2协议通信解密
  • ¥40 图书信息管理系统程序编写
  • ¥20 Qcustomplot缩小曲线形状问题
  • ¥15 企业资源规划ERP沙盘模拟