Inorder遍历以错误的顺序打印

时间:2013-11-07 06:29:52

标签: c string binary-search-tree

#include<stdio.h>
#include<conio.h>
#include<malloc.h>
#include<string.h>
struct node{
 char *name;
 struct node *lchild;
 struct node *rchild;
};
void find(char *str,struct node **root,struct node **loc,struct node **par)
{
struct node *ptr,*ptrsave;
*loc=NULL;
*par=NULL;
if(*root==NULL)
{
   return;
}
if(!strcmp((*root)->name,str))
{
     *loc=*root;
     return;
}
ptrsave=NULL;
ptr=*root;
while(ptr!=NULL)
{
   if(!strcmp(ptr->name,str)) break;
   ptrsave=ptr;
   if(strcmp(ptr->name,str)>0)
      ptr=ptr->lchild;
   else
      ptr=ptr->rchild;
}
*loc=ptr;
*par=ptrsave;
}
void insert(struct node **p,char *str)
{
struct node *location,*parent,*temp;
find(str,&(*p),&location,&parent);
if(location!=NULL)
{
       printf("Element already exists\n");
       return;
}
temp=(struct node *)malloc(sizeof(struct node));
temp->name=strdup(str);
temp->lchild=NULL;
temp->rchild=NULL;
if(parent==NULL)
{
        *p=temp;
        return;
}
else
{
     if(strcmp(parent->name,str)>0)
        parent->lchild=temp;
     else
        parent->rchild=temp;
}
}


void inorder(struct node *root)
{
if(root!=NULL)
{
   preorder(root->lchild);
   printf("[%30s]\n",root->name);
   preorder(root->rchild);
}
}
int main()
{
struct node *root=NULL;
insert(&root,"Crocin");
insert(&root,"Acetyl");
insert(&root,"Colchichine");
insert(&root,"Diclofenac_50mg");
insert(&root,"Diclofenac_25mg");
insert(&root,"Morphine Sulphate");
insert(&root,"Fentanyl");
insert(&root,"Dolo");
insert(&root,"Ibuprofen");
insert(&root,"Tramadol");
insert(&root,"Paracetamol");
inorder(root);
getchar();
return 0;
}

这是我用于在二叉搜索树中创建和插入节点的代码。之后我创建了递归的inorder函数。但这并没有给出正确的输出。我无法找到造成差异的错误。有人可以建议我哪里出错吗?

1 个答案:

答案 0 :(得分:1)

更改

void inorder(struct node *root)
{
if(root!=NULL)
{
   preorder(root->lchild);
   printf("[%30s]\n",root->name);
   preorder(root->rchild);
}

void inorder(struct node *root)
{
if(root!=NULL)
{
   inorder(root->lchild);
   printf("[%30s]\n",root->name);
   inorder(root->rchild);
}

您正在使用其他功能(预购)(未在您的代码中列出)