【问题标题】:Implementing BinarySearchTree using Single Linked List使用单链表实现 BinarySearchTree
【发布时间】:2013-01-06 06:41:56
【问题描述】:

我有以下用于实现 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);
    }

}

【问题讨论】:

  • 您是否尝试过在调试器中单步执行代码?逐行执行,同时检查变量和指针。
  • 您应该创建一个单独的函数来创建和返回节点,以及另一个添加节点(以及根节点)的函数。因此,正如 CubeSchrauber 所述,您将能够避免遇到此问题。

标签: c algorithm data-structures binary-tree


【解决方案1】:

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

尝试考虑改用 BST **ptr。

【讨论】:

  • 有没有一种方法可以在不使用指针的情况下实现相同的功能。?
  • @krrishna 您应该创建一个单独的函数来创建和返回节点,以及另一个添加节点(以及根节点)的函数。
猜你喜欢
  • 2018-10-02
  • 1970-01-01
  • 1970-01-01
  • 2014-04-07
  • 1970-01-01
  • 2013-12-03
  • 2014-03-07
  • 1970-01-01
  • 2023-03-02
相关资源
最近更新 更多