为什么即使插入值,树也是null?

时间:2016-10-09 16:31:14

标签: c

我正在尝试使用二叉搜索树程序。这是我的主要计划。每次我尝试打印插入到树中的值的Inorder遍历时,printInorder函数表示它为空或为空。我知道root被初始化为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);
    }
}

1 个答案:

答案 0 :(得分:1)

您的insert函数调用createTreep变量分配新实例,但您不会将此变量分配给root变量中的main变量1}}函数,因此root在函数返回后保持NULL(即root = insert(root, ...)可以工作)。

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