-->

二叉搜索树插入不工作(Binary Search Tree insertion doesn'

2019-10-28 18:02发布

我下面一本书,问题解决与在C语言程序设计,学习C.在这本书中,他们给了所有必需的部件,以建立一个二叉搜索树....但是,我的实现没有工作。 下面是插入部;

void
add_to_t(tree_node_t *oldTreep, // input/output - binary search tree
        tree_element_t ele)       // input - element to add
{
    oldTreep = tree_insert(oldTreep, ele);
}
tree_node_t * tree_insert(tree_node_t *oldTreep, tree_element_t ele)
{
    if(oldTreep == NULL){
        oldTreep = TYPED_ALLOC(tree_node_t);
        strcpy(oldTreep->element.name, ele.name);
        strcpy(oldTreep->element.sName, ele.sName);
        oldTreep->element.seatClass = ele.seatClass;
        oldTreep->leftp = NULL;
        oldTreep->rightp = NULL;
    }
    else if (strcmp(oldTreep->element.name, ele.name)==0){
        /* duplicate key - no insertion */
    }
    else if (strcmp(oldTreep->element.name, ele.name)>0){
        oldTreep->rightp = tree_insert(oldTreep->rightp, ele);
    }
    else
    {
        oldTreep->leftp = tree_insert(oldTreep->leftp, ele);
    }
    return(oldTreep);

}

我scan_passenger funvtion(我传递ELE从这个函数调用的结果);

void scan_passenger(tree_element_t *pass)
{
    char passName[10], passSname[10];
    int classNum;
    printf("\nEnter the Name of passenger to add the binary search tree> ");
    scanf("%s", passName);
    printf("Enter the Surname of passenger to add the binary search tree> ");
    scanf("%s", passSname);
    printf("Enter the class number of passenger to add the binary search tree> ");
    scanf("%d", &classNum);
    strcpy(pass->name, passName);
    strcpy(pass->sName, passSname);
    pass->seatClass = classNum;
}

而我typdefs和头文件,如果需要;

#include "stdio.h"
#include "stdlib.h"
#include "string.h"
#define TYPED_ALLOC(type) (type *)malloc(sizeof (type))
typedef struct tree_element_s {
    char name[10];
    char sName[10];
    int seatClass;
}tree_element_t;

typedef struct tree_node_s {
    tree_element_t element;
    struct tree_node_s *leftp, *rightp;
}tree_node_t;

我的问题是,它不会产生二叉搜索树的根。 当我尝试了新的元素添加到堆,现在看来,它会创建一个新的节点。 当我跟踪我的代码,似乎这个功能的每个实例返回NULL。 我想说的每一次当我打电话tree_insert,它会第一个if语句(思根是空的)......对不起,我的英语不好。 而谈到编码术语(也可能是因为,我又回到了没有1个year.So我可以把它们混合后,从书本学习C)预先感谢时,我可能做了一些错误。

Answer 1:

在add_to_t,更新oldTreep,但因为它是一个局部变量,新的价值,即会为你留下的功能丧失。

你可以,例如,oldTreep的新值返回给调用者,它与返回的值更新 oldTreep

tree_node_t
add_to_t(tree_node_t *oldTreep, // input/output - binary search tree 
        tree_element_t ele)       // input - element to add 
{ 
    return tree_insert(oldTreep, ele); 
} 

...

myRootOfTheTree = add_to_t (myRootOfTheTree, element);

另一种方案是始终在树中的一个虚设的元素。



文章来源: Binary Search Tree insertion doesn't work