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

用VC调,只是让一直输入,但就是不输出结果,看看!!!!谢谢!!!!!!!

武定伟 发布于 2010-11-07 11:15, 744 次点击
二叉树的建立和遍历 有错误 没结果 帮帮看看
#include<iostream>
#include<stdlib.h>
using namespace std;

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

typedef int TElemType ;
typedef int Status;

typedef struct BiTNode{
TElemType data;
struct BiTNode *lchild,*rchild;
}BiTNode,*BiTree;

Status CreatBiTree(BiTree &T)154
{
char ch;
cin>>ch;
if(ch==' ')T=NULL;
else{
  if(!(T=(BiTNode*)malloc(sizeof(BiTNode))))exit(OVERFLOW);
  T->data=ch;
  CreatBiTree(T->lchild);
  CreatBiTree(T->rchild);
}
return OK;
}
Status PreOrder(BiTree &T)
{
if(T)
{
  cout<<T->data;
  PreOrder(T->lchild);
  PreOrder(T->rchild);
}
return OK;
}


int main()
{
BiTree T;
CreatBiTree(T);
PreOrder(T);
return OK;
}

5 回复
#2
ou11112010-11-07 12:54
#include <stdio.h>
#include <string.h>
#include <malloc.h>
typedef struct node
{
  char data;
  struct node *lchild,*rchild;
}bnode,*blink;

blink creat(blink bt)
{
  char ch;
  ch=getchar();
  if(ch!='#')

  {
   if(!(bt=(bnode*)malloc(sizeof(bnode))))
      printf("ERROR!\n");
   bt->data=ch;
   bt->lchild=creat(bt->lchild);
   bt->rchild=creat(bt->rchild);
  }
  else
      bt=NULL;
  return bt;
}
//先序遍历
void preorder(blink bt)
{
   if(bt)
{
  printf("%c",bt->data);
  preorder(bt->lchild);
  preorder(bt->rchild);

}



}
//后序遍历
void postorder(blink bt)
{
  if(bt)
  {
    postorder(bt->lchild);
    postorder(bt->rchild);
    printf("%c",bt->data);

  }
}


void main()
{
  blink root;
  root=(bnode*)malloc(sizeof(bnode));
  printf("请输入创建一科二叉树的先序序列:\n(#代表空疏,请注意将叶子结点下的空树补充完整\n如:输入ab##c##)");
  root=creat(root);
 printf("先序遍历的结果");
  pretorder(root);
  printf("\n");

  printf("后序遍历的结果");
  postorder(root);
  printf("\n");
}
这是一个二叉树的算法
自己对照一下看看你哪错了
#3
寒风中的细雨2010-11-08 06:45
这里 cin 根本 就没法 获取到 空格  
上次的也是 这样的问题

#4
chinachina12010-11-09 10:04
回复 3楼 寒风中的细雨
学习了,
#5
chinachina12010-11-09 10:07
#include<iostream>
#include<stdlib.h>
using namespace std;

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

typedef char TElemType ;
typedef int Status;

typedef struct BiTNode{
TElemType data;
struct BiTNode *lchild,*rchild;
}BiTNode,*BiTree;

Status CreatBiTree(BiTree &T)
{
if (T==NULL)
{
      printf("此次循环结束\n");
        return 1;
}
char ch;
cin>>ch;

if(ch=='`')
{
    printf("输入为空跳转上一层\n");
    T=NULL;
    return 1;
}
else{
  if(!(T=(BiTNode*)malloc(sizeof(BiTNode))))
      return 0;
  T->data=ch;
  printf("建立左树枝\n");
  CreatBiTree(T->lchild);
  printf("建立右树枝\n");
  CreatBiTree(T->rchild);
  return 1;
}
return OK;
}

Status PreOrder(BiTree &T)
{
if(T)
{
  cout<<T->data;
  PreOrder(T->lchild);
  PreOrder(T->rchild);
}
return OK;
}


int main()
{
BiTree T;
CreatBiTree(T);
PreOrder(T);
return OK;
}
照着版主说的改了下
#6
武定伟2010-11-09 15:52
谢谢大家!!!!非常感谢!!!!!
1