回 帖 发 新 帖 刷新版面

主题:[原创]data structure

帮我看看哪里错了
#include "iostream"
#define MaxSize 100
typedef char ElemType;
typedef struct node
{
    ElemType data;
    struct node *left,*right;
}BTree;
void preorder(BTree *BT)
{
 if(BT!=NULL)
 {
  printf("%s",BT->data);
  preorder(BT->left);
  preorder(BT->right);
 }
}
void inorder(BTree *BT)
{
 if(BT!=NULL)
 {
  inorder(BT->left);
  printf("%s",BT->data);
  inorder(BT->right);
 }
}
void postorder(BTree *BT)
{
 if(BT!=NULL)
 {
  postorder(BT->left);
  postorder(BT->right);
  printf("%s",BT->data);
 }
}
void creatree(BTree **BT,char *str)
{
 BTree *stack[MaxSize],*p;
 int top=-1,k,j=0;
 char ch;
 ch=str[j];
 while(ch!='\0')
 {
  switch(ch)
  {
   case '(':top++;stack[top]=p;k=1;
       break;
   case ')':top--;
       break;
   case ',':k=2;
       break;
   default:p=(BTree *) malloc(sizeof(BTree));
       p->data=ch;
       p->left=p->right=NULL;
       if(*BT==NULL)
           *BT=p;
       else
       {
        switch(k)
        {
        case 1:stack[top]->left=p;
            break;
        case 2:stack[top]->right=p;
        }
       }
  }
  j++;
  ch=str[j];
 }

}
void main()
{
 BTree *B;
 char *s="A(B(D,E(H,I)),C(G))";
 creatree(&B,s);
 printf("/n preorder:");
 preorder(B);
 printf("/n inorder:");
 inorder(B);
 printf("/n postorder:");
 postorder(B);
}

回复列表 (共2个回复)

沙发

int top=-1,k,j=0;
这里声明了一个k,但并没有初始化,当读入第一个A时,由于它既不是(也不是),更不是,,所以就到了default。判断*BT是否时NULL。这个时候应该不是,因为你的BTree *B中,对于B也没有初始化。那么就进入了switch(k),因为这个时候时第一次用到k,而你又没有初始化,k的值应该是随机的。
应该就是这个问题了。
变量声明应该都要初始化的。现在的C++编译器还不会像java那样帮你初始化。

板凳

[quote]int top=-1,k,j=0;
这里声明了一个k,但并没有初始化,当读入第一个A时,由于它既不是(也不是),更不是,,所以就到了default。判断*BT是否时NULL。这个时候应该不是,因为你的BTree *B中,对于B也没有初始化。那么就进入了switch(k),因为这个时候时第一次用到k,而你又没有初始化,k的值应该是随机的。
应该就是这个问题了。
变量声明应该都要初始化的。现在的C++编译器还不会像java那样帮你初始化。[/quote]

我来回复

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