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

怎样用栈实现二叉树的中序遍历

张残卷 发布于 2013-05-17 22:33, 795 次点击

#include<iostream>
using namespace std;
#include<stdio.h>
#include<stdlib.h>
#define MAXSIZE 100
#define OVERFLOW -1
typedef char TElemType ;
typedef char SElemType ;
typedef struct BiTNode{
    TElemType data;
    struct BiTNode *lchild,*rchild;
}BiTNode,*BiTree;
typedef struct {
    SElemType *base;
    SElemType *top;
    int stacksize;
}SqStack;
void InitStack(SqStack &S){
    char *base;
    S.base=new SElemType[MAXSIZE];
    if(!base)
    exit(OVERFLOW);
    S.top=S.base;
    S.stacksize=MAXSIZE;
}
void Push(SqStack &S,SElemType e){
 if(S.top-S.base==S.stacksize)
 cout<<"栈满!\n";
 *S.top++=e;
}
void Pop(SqStack &S,SElemType &e){
   
    if(S.top==S.base)
    cout<<"栈空!\n";
    e=*--S.top;
}

void CreatBiTree(BiTree &T)
{
    char ch;
    cin>>ch;
    if(ch=='#')
    T=NULL;
    else{
        T=new BiTNode;
        T->data=ch;
        CreatBiTree(T->lchild);
        CreatBiTree(T->rchild);
    }
}
void InOrderTraverse(BiTree T)
{
    SqStack S;
    BiTree p;
    InitStack(S);
    p=T;
    BiTNode *q=new BiTNode;
    while(p!=NULL){
        if(p)
        {Push(S,p);
        p=p->lchild;}
    else
        {Pop(S,q);
        cout<<q->data;
        p=q->rchild;}
    }
}

void main()
{
    BiTree T;
    cout<<"建立二叉树:\n";
    CreatBiTree(T);
      cout<<"二叉树为:\n";
    InOrderTraverse(T);
   
}
2 回复
#2
张残卷2013-05-17 22:37
我在运行时它提醒struct BiTNode *不能转换为cahr,但我在实验室上机时老师的程序是这样的,不知道究竟怎样修改,希望高手能点播哈我这个新手,谢谢啦
#3
邓士林2013-05-19 20:45
你这是类型转换错误,改下类型就可以了
1