我正在尝试使用二叉搜索树程序。这是我的主要计划。每次我尝试打印插入到树中的值的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);
}
}
答案 0 :(得分:1)
您的insert
函数调用createTree
为p
变量分配新实例,但您不会将此变量分配给root
变量中的main
变量1}}函数,因此root
在函数返回后保持NULL
(即root = insert(root, ...)
可以工作)。
或者,您可以在调用insert之前创建根节点树(即root = createTree(...);
)。然而,递归调用自身的main
函数是一个坏主意。