数据结构—二叉树后序遍历求逆

来源:互联网 发布:淘宝买东西领淘金币 编辑:程序博客网 时间:2024/04/30 21:49
/*假设二叉树采用二叉链存储结构,设计一个算法输出从根节点到每个叶子节点的路径的逆(即求叶子节点及其所有祖先节点的序列)。*/#include <iostream>#include <malloc.h>#define MaxSize 100typedef char ElemType;using namespace std;typedef struct node{    ElemType data;    struct node *lchild;    struct node *rchild;} BTNode;void CreateBTNode(BTNode *&b,char *str)   //创建二叉树{    BTNode *St[MaxSize],*p;    int top=-1,k,j=0;    char ch;    b=NULL;    ch=str[j];    while(ch!='\0')    {        switch(ch)        {        case '(':            top++;            St[top]=p;            k=1;            break;        case ')':            top--;            break;        case ',':            k=2;            break;        default:            p=(BTNode *)malloc(sizeof(BTNode));            p->data=ch;            p->lchild=p->rchild=NULL;            if(b==NULL)                b=p;            else            {                switch(k)                {                case 1:                    St[top]->lchild=p;                    break;                case 2:                    St[top]->rchild=p;                    break;                }            }        }        j++;        ch=str[j];    }}/*将算法中访问节点的操作改为判断该节点是否为叶子节点,若是,输出栈中所有节点值。*/void AllPath(BTNode *b)   {    BTNode *St[MaxSize],*p;    int flag,i,top=-1;    if(b!=NULL)    {        do        {            while(b!=NULL)            {                top++;                St[top]=b;                b=b->lchild;            }            p=NULL;            flag=1;            while(top!=-1&&flag)            {                b=St[top];    //取出当前栈顶元素                if(b->rchild==p)                {                    if(b->lchild==NULL&&b->rchild==NULL)                    {                        for(i=top;i>0;i--)                            cout<<St[i]->data<<"->";                        cout<<St[0]->data<<endl;                    }                    top--;                    p=b;                }                else                {                    b=b->rchild;                    flag=0;                }            }        }while(top!=-1);        cout<<endl;    }}int main(){    BTNode *b;    CreateBTNode(b,"A(B(D(,G)),C(E,F))");    AllPath(b);    return 0;}

运行结果:


0 0
原创粉丝点击