注册 登录
编程论坛 数据结构与算法

请教一下这个为什么无法生成

weiziyi0530 发布于 2012-11-20 21:19, 414 次点击
#include<stdio.h>
#include<conio.h>
#include<stdlib.h>

#define OK 1
#define OVERFLOW -2
#define ERROR -1

#define  MAX_TREE_SIZE  100                    // 二叉树的最大结点数
 typedef int  SqBiTree[MAX_TREE_SIZE];                 // 0号单元存储根结点
 SqBiTree  bt; typedef struct BiTNode{     char data;   
 struct BiTNode *lchild,*rchild;//左右孩子指针 }BiTNode,*BiTree;
//先序建立二叉树
int CreateBiTree(BiTree &T){   
  //按先序次序输入二叉树中结点的值(一个字符),空格字符表示空树   
 //构造二叉链表表示的二叉树T   
  char ch;   
  scanf(&ch);  
   if(ch=='0')  T=NULL;   
  else{   
     if(!(T=(BiTNode *)malloc(sizeof(BiTNode))))           exit(OVERFLOW);      
   T->data=ch;   
     CreateBiTree(T->lchild );//构造左子树     
    CreateBiTree(T->rchild );//构造右子树     }   
  return OK; }
 int PreOrderTraverse(BiTree T,int(*Visit)(char e)){   
  //采用二叉链表存储结构,Visit是对数据元素操作的应用函数   
 //先序遍历二叉树T的递归算法,对每个数据元素调用函数Visit   
  if(T){         if(Visit(T->data ))            
 if(PreOrderTraverse(T->lchild ,Visit))         
       if(PreOrderTraverse(T->rchild ,Visit))
  return OK;         
return ERROR;     }else return OK; }
//显示
 int PrintElement(char e){   
 printf("%c\n",e);
 return OK; }
 int main(){   
 BiTNode *T;   
 CreateBiTree(T);  
   PreOrderTraverse(T,PrintElement);  
   return 0; }
4 回复
#2
zhu2240392012-11-21 06:59
#include<stdio.h>
#include<conio.h>
#include<stdlib.h>

#define OK 1
#define OVERFLOW -2
#define ERROR -1

#define  MAX_TREE_SIZE  100                    // 二叉树的最大结点数
typedef int  SqBiTree[MAX_TREE_SIZE];                 // 0号单元存储根结点
SqBiTree  bt;
typedef struct BiTNode{     
    char data;   
    struct BiTNode *lchild,*rchild;
} BiTNode;
 BiTNode *BiTree;
 
int CreateBiTree(BiTNode *T){   
  //按先序次序输入二叉树中结点的值(一个字符),空格字符表示空树   
//构造二叉链表表示的二叉树T   
  char ch;   
  scanf(&ch);  
   if(ch=='0')  T=NULL;   
  else{   
     if(!(T=(BiTNode *)malloc(sizeof(BiTNode))))           
         exit(OVERFLOW);      
        T->data=ch;   
         CreateBiTree(T->lchild );//构造左子树     
          CreateBiTree(T->rchild );//构造右子树     
         
          return OK; }}
int PreOrderTraverse( BiTNode *T,int Visit(char e)){   
  //采用二叉链表存储结构,Visit是对数据元素操作的应用函数   
//先序遍历二叉树T的递归算法,对每个数据元素调用函数Visit   
  if(T){         if(Visit(T->data ))            
if(PreOrderTraverse(T->lchild ,Visit))         
       if(PreOrderTraverse(T->rchild ,Visit))
  return OK;         
return ERROR;     }else return OK; }
//显示
int PrintElement(char e){   
printf("%c\n",e);
return OK; }
int main(){   
BiTNode *T;   
CreateBiTree(T);  
   PreOrderTraverse(T,PrintElement);  
   return 0; }

[ 本帖最后由 zhu224039 于 2012-11-21 07:08 编辑 ]
#3
zhu2240392012-11-21 07:01
给你改好了,编译通过,算法嘛 这个就不好说了
很乱 说实在的  不是把代码编译 我还真心看不下去
#4
zhu2240392012-11-21 07:09
void dayin(tree *p)          /*先序遍历*/
{   
    if(p!=NULL)
    {
        printf("%d %d\n",p->i);
        
      dayin(p->lift);
      dayin(p->right);
    }
}
送个算法给你
#5
weiziyi05302012-11-21 20:26
回复 4楼 zhu224039
恩恩 我才开始学  正在努力中
1