我有一个家庭作业来实现二叉搜索树(创建、删除、搜索)。我使用了老师提供的示例,但我无法使其工作。
到目前为止,这是我的代码:
void insert_node(int k){
struct node *nodnou,*flow,*parent;
nodnou = (struct node*)malloc(sizeof(node));
nodnou->st = NULL;
nodnou->dr = NULL;
nodnou->nr = k;
if (root==NULL)
{
root = (struct node*)malloc(sizeof(node));
root = nodnou;
}
else
{
flow = (struct node*)malloc(sizeof(node));
parent = (struct node*)malloc(sizeof(node));
flow = root;
parent = root;
while (((flow->st!=NULL) || (flow->dr!=NULL)) && flow!=NULL)
{
if (k<flow->nr)
{
parent = flow;
flow = flow->st;
}
else
{
parent = flow;
flow = flow->dr;
}
}
if (k<flow->nr)
{
parent->st = nodnou;
}
else
{
parent->dr = nodnou;
}
}
}
思路:这个函数获取我们要插入的节点的值作为k参数。该函数只会插入树的根(根是全局变量)。
我认为我最大的问题是while
遍历树以找到新节点位置的循环。
如果我使用while (flow!=NULL)
它,它将无法工作,因为流指针会分配给不存在的东西。请帮助我理解我错在哪里(作业)。