一个二叉排序树输出的问题

#include
#include
#include
using namespace std;
#define ElementType char
#define N 100
typedef struct TNode* BT;
struct TNode{
ElementType data;
BT left, right;
};
int i = 0;
BT Insert(BT BST,ElementType X) {
if (!BST) {
BST = (BT)malloc(sizeof(TNode));
BST->data = X;
BST->left = BST->right = NULL;
}
else {
if (X < BST->data)
BST->left = Insert(BST->left, X);
else if (X > BST->data)
BST->right = Insert(BST->right, X);
}
return BST;
}

char Find(BT BST, ElementType X)
{
if (!BST) {
return NULL;
}
else {
if (BST->data==X)
return X;
if (BST->data < X)
Find(BST->right, X);
else if(BST->data >X)
Find(BST->left, X);
}
}

void PreOrderTraverse1(BT T) {
if (T) {
printf("%c", T->data);
PreOrderTraverse1(T->left);
PreOrderTraverse1(T->right);
}
}
int main() {
BT T = (BT)malloc(sizeof( BT));
char data[7] = { 1,2,3,4,5,6,7 };

for (int i = 0; i <=6; i++)
{
    printf("%c", Insert(T, data[i])->data);
}
printf("前序遍历:");
PreOrderTraverse1(T);
return 0;

}
大哥们看一下,为什么我把数据插入到树里面在输出来的时候是错的,调试过是说插入里面 if (X < BST->data) BST->data是无效的??,大概就是输出来答案都是各种乱码

1个回答

#include <iostream>
#include <cstdlib>

using namespace std;
#define ElementType char
#define N 100
/*typedef struct TNode* BT;
struct TNode{
    ElementType data;
    BT left, right;
};*/
typedef struct TNodes
{
    ElementType data;
    struct TNodes *left, *right;
}TNode, *BT;
int i = 0;
BT Insert(BT BST, ElementType X) {
    if (BST == NULL) {
        BST = (BT)malloc(sizeof(TNode));
        BST->data = X;
        BST->left = BST->right = NULL;
    }
    else {
        if (X < BST->data)
            BST->left = Insert(BST->left, X);
        else if (X > BST->data)
            BST->right = Insert(BST->right, X);
    }
    return BST;
}

char Find(BT BST, ElementType X)
{
    if (!BST) {
        return NULL;
    }
    else {
        if (BST->data == X)
            return X;
        if (BST->data < X)
            Find(BST->right, X);
        else if (BST->data >X)
            Find(BST->left, X);
    }
}

void PreOrderTraverse1(BT T) {
    if (T) {
        printf("%c", T->data);
        PreOrderTraverse1(T->left);
        PreOrderTraverse1(T->right);
    }
}
int main() {
    BT T = NULL;
    char data[7] = { '1', '2', '3', '4', '5', '6', '7' };

    for (int i = 0; i <= 6; i++)
    {
        printf("%c", Insert(T, data[i])->data);
    }
    printf("前序遍历:");

    PreOrderTraverse1(T);
    getchar();
    return 0;
}

首先
图片说明

图片说明

仔细调试!!!弄清楚结构体指针和结构体
图片说明

图片说明

图片说明

图片说明

qq_44017076
qq_44017076 回复qq_44017076: 搞懂了,谢谢了啊!!!!
3 个月之前 回复
qq_44017076
qq_44017076 谢谢,准备采纳了,太感谢了,但最后还有一点小问题,就是我在没有改树的定义,仅仅是改了if(!BST)成if(BST==NULL)时结果也正确了,难道这两种不是都表示树是空的吗
3 个月之前 回复
alongname
alongname 回复qq_44017076: 。。。
3 个月之前 回复
qq_44017076
qq_44017076 回复alongname: 貌似不是这个问题 引发了异常: 读取访问权限冲突。 BST 是 0xFFFFFFFFFFFFFFFF。 这是调试结果
3 个月之前 回复
alongname
alongname 回复: char data[7] = { 1,2,3,4,5,6,7 }; --- char data[7] = { '1','2','3','4','5','6','7' };
3 个月之前 回复
alongname
alongname 回复qq_44017076: char data[7] = { 1,2,3,4,5,6,7 };
3 个月之前 回复
qq_44017076
qq_44017076 还是不太行,输出还是乱码,但是我把insert函数返回一个char类型值是输出是正确的,但是按道理返回一个节点再输出值也没有错啊,但就是不对
3 个月之前 回复
Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
立即提问