c - 二叉树中的随机零

标签 c tree nodes garbage

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

//-------------------------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/

相关文章:

android - 从 C 服务器发送结构到 java (android) 客户端

php - 从数据库表创建数组 "tree"

sprite-kit - 如何在 sprite kit/SKphysics 关节中创建多个节点角色?

java - JUNG:在同一位置加载图节点

node.js - NPM 模块安装错误

c - 理解在内存地址返回值的 c#define

c - 为什么我会收到函数参数的未声明错误? (C)

c - 将二维数组作为参数传递给函数

algorithm - 最低公共(public)祖先实现 - 有什么区别?

javascript - 递归函数创建树