回 帖 发 新 帖 刷新版面

主题:看看这个建立并中序二叉树有什么错

#include<stdio.h>
#include<malloc.h>


typedef struct ThrTreeNode * PThrTreeNode;
struct ThrTreeNode{ char data;
     PThrTreeNode  lchild,rchild;
}; 


//建立二叉树
void CreateBinTree(PThrTreeNode T)
{   char ch;
scanf("%c",&ch);
if(ch=='.')  T=NULL;
else
{ PThrTreeNode T=(PThrTreeNode)malloc(sizeof(struct ThrTreeNode));
if(T==NULL) {printf("分配空间失败");
     return;
}      //生成一个新节点
  T->data=ch;
  CreateBinTree(T->lchild);                           
  CreateBinTree(T->rchild);                            
}
}


void Inorder(PThrTreeNode T)
  {  if(T) { Inorder(T->lchild);
     printf("%c",T->data);
  Inorder(T->rchild);}
  }

void  main()
{struct ThrTreeNode * T;
CreateBinTree(T);
Inorder(T);
}
不能输出遍历的序列???

回复列表 (共3个回复)

沙发

这是我的源程序,你自己参考一下吧
#include<stdio.h>
typedef struct bitnode{/* 定义二叉树结构体 */
    char data;
    struct bitnode *lchild,*rchild;
    }bitnode,*bitree;
bitree createbitree(bitree root)
{
 char c;
 c=getch();printf("%c",c);
 if(c=='.')
    root=NULL;
 else
 {
  root=(bitree)malloc(sizeof(struct bitnode));
  root->data=c;
  root->lchild=createbitree(root->lchild);
  root->rchild=createbitree(root->rchild);
 }
 return(root);
}

 printbyinorder(bitree root)
{ /* 用中序遍历打印出元素 */
 if(root)
 {
  printf("%c,",root->data);
  printbyinorder(root->lchild);
  printbyinorder(root->rchild);
 }
}
void main()
{
 bitree T;
 printf("create a bintree!\n");
 T=createbitree(T);
 printf("\nprint by zhongxu\n");
 printbyinorder(T);
 getch();
}

板凳

#include<stdio.h>
#include<malloc.h>
typedef struct ThrTreeNode

    char data;
  struct  ThrTreeNode  *lchild,*rchild;
}ThrTreeNode, *PThrTreeNode; 


//建立二叉树
int CreateBinTree(PThrTreeNode *T)
{   
    char ch;
 scanf("%c",&ch);

 if(ch==' ') 
 {
    (*T)=NULL;
    return 0;
 }
 else
{
    
   (*T)=(PThrTreeNode)malloc(sizeof(ThrTreeNode));
  if((*T)==NULL) 
  {
      printf("分配空间失败");
      exit(0);
  }      //生成一个新节点
  (*T)->data=ch;
  CreateBinTree(&(*T)->lchild);                           
  CreateBinTree(&(*T)->rchild);                            
}
return 0;
}


void Inorder(const PThrTreeNode *T)
  { 
    if(T) 
    {
     
        Inorder(&(*T)->lchild);
        printf("%c",(*T)->data);
        Inorder(&(*T)->rchild);
    }
  }

void main()

    PThrTreeNode T;
    CreateBinTree(&T);
    printf("先序遍历");
    Inorder(&T);
}

3 楼

是你的创建出了问题,没有真正实现创建!

我来回复

您尚未登录,请登录后再回复。点此登录或注册