c - 即使我插入了值,为什么它说树为空?

标签 c

我正在尝试开发二叉搜索树程序。这是我的主要程序。每次我尝试打印插入树中的值的中序遍历时, printInorder 函数都会说它是空的或 null 。我知道根被初始化为 NULL,但如何让函数知道树不为空?

void main()
{
    int pgS, ch;
    char chT[MAX], chT2[MAX];
    treePtr root = NULL;

    menu();
    scanf("%d",&ch);

    switch(ch)
    {
        case 1:
            fflush(stdin);
            printf("\nName of the Content: "); 
            gets(chT); 
            printf("\nPage of the content above: "); 
            scanf("%d",&pgS);
            insert(root,pgS,chT); 
            system("cls");  
            main();
            break;
        case 2:
            system("cls");
            printInOrder(root);
            Sleep(5000);
            main(); 
            break;
        case 3:
            printf("\nSearch Content: ");
            gets(chT2);
            search(root,chT2);
    }

    getch();
}

一些功能,也许能帮上忙。

treePtr insert(treePtr p, elementType noP, char *Incontent){ //insert elements in the tree
    if(p==NULL) {p=createTree(Incontent,noP);}
    else {
        if(p->pages > noP){
            p->left=insert(p->left,noP,Incontent);
            p->part=Incontent;
            p->pages=noP;
        }
        else if (p->pages <noP){
            p->right=insert(p->right,noP,Incontent);
        p->part=Incontent;
            p->pages=noP;

        }
    } return p;
}
void printInOrder(treePtr p){
    if (p == NULL){printf("Empty");}
    else {
    printInOrder(p->left);
    printf("\nTABLE OF CONTENTS\n%s\t\t %d ", p->part,p->pages);
    printInOrder(p->right);
    }
}

最佳答案

您的insert函数调用createTree将新实例分配给 p变量,但您不将此变量分配给 root main 中的变量函数,所以root仍然NULL函数返回后(即 root = insert(root, ...) 可以工作)。

或者,您可以在调用 insert 之前简单地创建根节点树(即 root = createTree(...); )。尽管如此,main函数递归调用自身是一个坏主意。

关于c - 即使我插入了值,为什么它说树为空?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39945890/

相关文章:

c - 使用什么数据结构? ( HashMap 与特里树与?)

c++ - 如何检测用户何时按下电源关闭按钮?

c - 用另一个结构初始化一个结构

c - 对 libusb_hotplug_register_callback 的 undefined reference

c - Opengl使 "AI"桨上下移动

具有未定义输入的 C 中的凯撒加密

c - 由信号 SIGSEGV(地址边界错误)终止

c - #define FOO 1u 2u 4u ... 1u 和 2u 是什么意思?

c - 使用\r 覆盖标准输出中的上一行

c - Tic Tac Toe 确定获胜者算法