c - 使用单链表实现 BinarySearchTree

标签 c algorithm data-structures binary-tree

我有下面的代码,我用它来实现 BinarySearchTree。不知何故,它没有构建二叉树。任何人都可以帮助解决问题吗?

typedef struct BinarySearchTree

{

    struct BinarySearchTree *left;
    int nodeval;
    struct BinarySearchTree *right;

} 
BST;

BST *root=NULL;

void addrootnode(BST *,int );

void addnode(BST *,int );

void deletenode(int );

void printnodes();

main()

{

    int nodeval;
    char choice;
    printf("\n r->rootnode \n a->add \n d->delete \n p->print \n e->exit\n");
    while (1)
    {   
        printf("\nEnter your choice:");
        scanf("%c",&choice);
        switch (choice)
        {
        case 'r':
            printf("\nEnter the root node value to add: ");
            scanf("%d",&nodeval);
            addrootnode(root,nodeval);
            break;
        case 'a':
            printf("\nEnter the node value to add: ");
            scanf("%d",&nodeval);
            addnode(root,nodeval);
            break;
        case 'd':
            printf("\nEnter the node value to delete: ");
            scanf("%d",&nodeval);
            break;
        case 'p':
            //printf("\n");
            printnodes(root);
            break;
        case 'e':           
            exit(0);
        default:
            break;
        }
    }
    getchar();

}//end of main

//addrootnode

void addrootnode(BST *ptr,int num)

{

    if(ptr==NULL)
    {
        ptr=(BST *) malloc(sizeof(BST));
        ptr->left=NULL;
        ptr->nodeval=num;   
        ptr->right=NULL;        
        root=ptr;       
    }
}
//add node

void addnode(BST *ptr,int num)
{

    if(ptr==NULL)
    {
        ptr=(BST *) malloc(sizeof(BST));
        ptr->left=NULL;
        ptr->nodeval=num;   
        ptr->right=NULL;        


    }
    else if(num < ptr->nodeval )
    {       
        addnode(ptr->left,num);
    }
    else
    {

        addnode(ptr->right,num);
    }

}

//delete functionality

void deletenode(int nodeval)
{
}

//print all nodes

void printnodes(BST *ptr)

{

    if (ptr)

    {
        printnodes(ptr->left);
        printf("%d\t",ptr->nodeval);
        printnodes(ptr->right);
    }

}

最佳答案

你不应该使用 BST *ptr 作为 addnode 的参数。您尝试为其分配一个值,但此时 ptr 是函数 addnode 的局部变量,不会改变父节点的预期左指针或右指针。

尝试考虑改用 BST **ptr。

关于c - 使用单链表实现 BinarySearchTree,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14179987/

相关文章:

c++ - 在未排序的整数数组中找到最小元素比 O (n) 更快?

algorithm - 删除 AVL 树中所有元素的最有效方法是什么(排序删除)

将十进制数转换为其二进制表示形式的 char 数组 :

c - 聚集功能

MYSQL 数据库 - 如何使用存储应显示的订单项目的 "order"列 - 按另一列分组

c++ - C++ 中循环的替代方案

javascript - 处理 JSON 以创建子级与父级的层次关系

c - 从 C 访问 Lua 子表字段

C错误: expected ';' or ',' or ")' ?

c - 查找重复字符串的高效搜索算法