| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 387 人关注过本帖
标题:求指导,二叉树创建和遍历那里错了呢。
取消只看楼主 加入收藏
pmy931117
Rank: 1
等 级:新手上路
帖 子:19
专家分:0
注 册:2012-7-14
结帖率:33.33%
收藏
已结贴  问题点数:16 回复次数:0 
求指导,二叉树创建和遍历那里错了呢。
程序代码:
#include <malloc.h>
#include <stdio.h>
#include <stdlib.h>
#include <string>
#define OVERFLOW -1
#define ERROR 0
#define OK 1
#define STACK_INIT_SIZE 100;
#define STACKINCREMENT 10;
typedef int Status;
typedef char TElemType;


typedef struct BiTNode{
        char data;
        struct BiTNode *lchild;//左右孩子指针
        struct BiTNode *rchild;
        }BiTNode,*BiTree;
typedef struct{ 
  char *base;
  char *top;
  int stacksize;
}SqStack;

int InitStack(SqStack &S);
int  PopStack(SqStack &S,char e);
int PushStack(SqStack &S,char e);
int StackEmpty(SqStack S);
void Postorder(BiTNode  *p);
int StackEmpty(SqStack S); 
    
int CreateBiTree(BiTree &T)

 //按先序次序输入二叉树中结点的值,空格字符表示空树

 //构造二叉链表表示的二叉树T
 {
   char ch; 
   printf("请输入元素:\n");                     
   scanf("%c",&ch);
   if(ch==' ')T=NULL;
   else{
      if(!(T=(BiTNode *)malloc(sizeof(BiTNode))))exit(OVERFLOW);
      T->data=ch;
      CreateBiTree(T->lchild);
      CreateBiTree(T->rchild);
      }
       return OK; 
  }//CreateBiTree
  
void  Postorder( BiTNode  *p)  { 
     if (p!=NULL)     
     {Postorder( p->lchild );
      Postorder(p->rchild ) ; 
      printf("%c",p->data);     
      }
       }//Postorder

  
Status InitStack(SqStack &S)
{S.base=(int *)malloc(STACK_INIT_SIZE *sizeof(char));

 if(!S.base) exit(OVERFLOW);

 S.top = S.base;

 S.stacksize = STACK_INIT_SIZE;

 return OK;
}   //InitStack  
int InOrderTraverse(BiTree T,Status(*Visit)(char e)){
    BiTree p;
    SqStack S;
    if(T){

 {InitStack(S);
  p=T;
  while (p||!StackEmpty(S)){
       if(p){PushStack(S,p->data);p=p->lchild;}
       else{
            PopStack(S,p->data);if(!Visit(p->data))return ERROR;
            p=p->rchild;
            }//else
          }//while 
          return OK;
        }//InOrderTraverse
 

int StackEmpty(SqStack S)
{if(S.top==S.base) 
  return TRUE;

 else
  return FALSE;
}//StackEmpty
        
int PushStack(SqStack *S,char e)
{

 
  if(S->top - S->base>=S->stacksize)
   {

     S->base=(SElemType *) realloc(S->base,
        (S->stacksize + STACKINCREMENT) * sizeof(SElemType));
     if(!S->base)exit(OVERFLOW);
     S->top=S->base+S->stacksize;
     S->stacksize += STACKINCREMENT;
   }//PushStack
  

  *(S->top++)=e;
  return OK;
}

int PopStack(SqStack *S,SElemType *e)
{
  if(S->top==S->base) return ERROR;
  *e=*--S->top;
  return OK;
}//PopStack

int main()
{SqStack S;

 InitStack(S);

 char e;

 struct BiTNode *T=0;

 T=CreateBiTree();

 printf("中序遍历:\n");

 Postorder(T);

}  
搜索更多相关主题的帖子: 二叉树 
2012-11-28 17:38
快速回复:求指导,二叉树创建和遍历那里错了呢。
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.024186 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved