-1

我正在尝试在 C 中实现二叉树。首先插入值,然后将它们遍历到 Preorder。但是当我调用函数 preorder() 时,它给了我无限循环,只插入了最后一个值。我正在使用以下代码:

struct node* insert(struct node *root,int num);

void preorder(struct node *root);

struct node *root=NULL;

int count=1;

struct node {

    struct node *lchild;
    struct node *rchild; 
int data;
};

int main(){

    root=insert(root,1);
//root=insert(root,2);
preorder(root); 
return;
}

struct node* insert(struct node *root,int num){//insert a node into tree

   //struct node *q;
if(root==NULL)
{
    root=(struct node*)malloc(sizeof(struct node)); 
    root->data=num;
    root->lchild=NULL;
    root->rchild=NULL;
    //root=q;
    count++;
}
else{
    if(count % 2==0){
        root->lchild=insert(root->lchild,num);
    }
    else{
        root->rchild=insert(root->rchild,num);
    }
}
return(root);
}

void preorder(struct node *root){

    while(root!=NULL){
    printf("%d\t",root->data);
    preorder(root->lchild);
    preorder(root->rchild);     
}
}

这里我最初只插入 1 个值,但出现了错误。所以在 insert() 中不应该有任何错误,应该在 preorder() 或 main() 中进行一些更正。它可以是什么?

4

3 回答 3

3

我不确定preorder()应该怎么做,但是这条线会导致无限循环:

 while(root!=NULL){

我猜你的意思是if不写while

于 2013-01-25T08:04:28.393 回答
2

您需要在预购函数中使用 if 语句而不是 while 语句。

while(root!=NULL){ //This is causing the infinite loop

在循环体中,您不会在任何时候更改根指针,因此,如果条件为真,即根元素的条件为真,它将永远不会退出循环。

它应该是:

if(root!=NULL){
于 2013-01-25T08:05:31.853 回答
0

您必须编写if而不是while使递归循环具有基本条件并在某处结束。

在你的代码中而不是if(root!=NULL)写写while(root!=NULL)

于 2013-01-25T10:26:29.720 回答