byCode1024 2021-09-29 15:18 采纳率: 25%
浏览 50

二叉排序树的插入操作后,为什么我遍历出的结果不对

#include <stdio.h>
#include <malloc.h>

typedef struct BSTNode
{
    int data;
    struct BSTNode *lchild, *rchild;
} BSTNode, *BSTree;

/**
 *二叉排序树的插入
 * 1、若二叉排序数为空,则待插入结点*s作为根结点插入到空树中
 * 2、若二叉排序树非空,则将key与根结点的关键字T->data.key进行比较
 *    *若key小于T->data.key,则将*s插入左子树
 *    *若key大于T->data.key,则将*s插入右子树
 * @param T
 * @param e
 */
void InsertBST(BSTree T, int e)
{
    if (T == NULL)
    {
        T = (BSTree)malloc(sizeof(BSTNode));
        T->data = e;
        T->lchild = T->rchild = NULL;
    }
    else if (T->data > e)
    {
        InsertBST(T->lchild, e);
    }
    else
    {
        InsertBST(T->rchild, e);
    }
}


void order(BSTree T)
{ //中序遍历
    if (T != NULL)
    {
        order(T->lchild);
        printf("%d\n", T->data);
        order(T->rchild);
    }
}

int main()
{
    int i;
    int a[5] = {3, 4, 2, 5, 9};
    BSTree T;
    for (i = 0; i < 5; i++)
    {
        InsertBST(T, a[i]);
    }
    order(T);
}

img

  • 写回答

2条回答 默认 最新

  • baidu_30233079 2021-09-29 15:23
    关注
      这里根本没有把结点插到树里面,你只是分配一个结点,内存泄漏了。
        if (T == NULL)
        {
            T = (BSTree)malloc(sizeof(BSTNode));
            T->data = e;
            T->lchild = T->rchild = NULL;
        }
    
    
    评论

报告相同问题?

问题事件

  • 创建了问题 9月29日

悬赏问题

  • ¥17 pro*C预编译“闪回查询”报错SCN不能识别
  • ¥15 微信会员卡接入微信支付商户号收款
  • ¥15 如何获取烟草零售终端数据
  • ¥15 数学建模招标中位数问题
  • ¥15 phython路径名过长报错 不知道什么问题
  • ¥15 深度学习中模型转换该怎么实现
  • ¥15 HLs设计手写数字识别程序编译通不过
  • ¥15 Stata外部命令安装问题求帮助!
  • ¥15 从键盘随机输入A-H中的一串字符串,用七段数码管方法进行绘制。提交代码及运行截图。
  • ¥15 TYPCE母转母,插入认方向