gpt4 book ai didi

c - 二叉树中的随机零

转载 作者:行者123 更新时间:2023-11-30 17:40:37 26 4
gpt4 key购买 nike

我遇到了一个简单的二叉树操作程序的问题。代码中某处输入了一个零,我根本不知道如何摆脱它。程序的主要功能如下:

//-------------------------Structure definition----------------------------------------------------------------------------------
struct tree {
int data;
struct tree *left;
struct tree *right;
};


//-------------------------Function definitions--------------------------------------------------------------------------------
int traverse(struct tree *root);
struct tree * insert(struct tree *root, int num);
int search(struct tree *root, int num);
int maxdepth(struct tree *root);
void help();


//-------------------------Help function to display commands----------------------------------------------------------
void help()
{
printf("\n Q to quit program. \n");
printf(" # to insert # into the list. \n");
printf(" s # to search for # in the list. \n");
printf(" d # to delete # from list. \n");
printf(" p to print the entire list. \n");
printf(" ? to view this message again. \n\n");
}


//-------------------------Traverse (print)--------------------------------------------------------------------------------------
int traverse(struct tree *root)
{
if(root==NULL)
{
return 0;
}
traverse(root->left);
printf("%d ", root->data);
traverse(root->right);
}


//-------------------------Insert function to sort and insert user input ----------------------------------------------
struct tree * insert(struct tree *root, int num)
{
if(root==NULL)
{
root=malloc(sizeof(struct tree));
root->data = num;
root->left = root->right=NULL;
return(root);
}
if(num > root->data)
{
root->right=insert(root->right, num);
return(root);
}
if(num < root->data)
{
root->left=insert(root->left, num);
return(root);
}
if(num==root->data)
{
return (root);
}
}


//-------------------------Search function. Just returns a 1/0 for yes/no ------------------------------------------
int search(struct tree *root, int num)
{
if(root==NULL)return(0);
if(num==root->data)return(1);
if(1==search(root->left, num) || 1==search(root->right, num))
{
return(1);
}
else
{
return(0);
}
}


//------------------------MaxDepth function to calculate the depth of the tree --------------------------------
int maxdepth(struct tree *root)
{
int ldepth;
int rdepth;
if(root==NULL)
{
return 0;
}
else
{
ldepth=maxdepth(root->left);
rdepth=maxdepth(root->right);
if(ldepth > rdepth)
return ldepth+1;
else
return rdepth+1;
}
}

//-------------------------Main! --------------------------------------------------------------------------------------------------
int main(void)
{
struct tree *root;
char buffer[120]; //Temp storage
int num; //User input will move from buffer to here.
int searchVal;

//Memory Allocations block.
root=malloc(sizeof(struct tree));


printf("Hello. \n");
while(1==1)
{
printf("> ");

fgets(buffer, sizeof(buffer), stdin);

switch(buffer[0])
{
case '0':
case '1':
case '2':
case '3':
case '4':
case '5':
case '6':
case '7':
case '8':
case '9':
if(1==(sscanf(buffer, "%d", &num))){
insert(root, num);
}
break;

case 's':
if(1==(sscanf(buffer, "s %d", &num))){
searchVal=search(root, num);
if(1==search(root, num)){
printf("That number is in the list. \n");
}else{
printf("That number is not in the list. \n");
}
}
break;


case 'p':
traverse(root);
printf("\n Tree depth: %d \n", maxdepth(root));
break;

case '?':
help();
break;

case 'q':
case 'Q':
exit(0);
break;

default:
help();
break;

}
}
}

根据GDB,root->data在“printf(”Hello\n”)行设置为零,这对我来说没有多大意义。任何帮助将不胜感激,如果您需要,请告诉我查看其他函数,我将对其进行编辑。提前致谢。

最佳答案

//Memory Allocations block. 
root=malloc(sizeof(struct tree));
root=NULL;

分配内存后不要设置为 NULL。

关于c - 二叉树中的随机零,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21391147/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com