数据结构—二叉树后序遍历求逆
来源:互联网 发布:淘宝买东西领淘金币 编辑:程序博客网 时间: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
- 数据结构—二叉树后序遍历求逆
- 数据结构实验之求二叉树后序遍历和层次遍历
- 数据结构实验之求二叉树后序遍历和层次遍历
- 数据结构实验之求二叉树后序遍历和层次遍历
- 数据结构实验之求二叉树后序遍历和层次遍历
- 数据结构实验之求二叉树后序遍历和层次遍历
- 数据结构实验之求二叉树后序遍历和层次遍历
- 数据结构实验之求二叉树后序遍历和层次遍历
- 数据结构实验之求二叉树后序遍历和层次遍历
- 数据结构实验之求二叉树后序遍历和层次遍历
- 数据结构实验之求二叉树后序遍历和层次遍历
- 数据结构实验之求二叉树后序遍历和层次遍历
- 数据结构实验之求二叉树后序遍历和层次遍历
- 数据结构实验之求二叉树后序遍历和层次遍历
- 数据结构实验之求二叉树后序遍历和层次遍历
- 数据结构实验之求二叉树后序遍历和层次遍历
- 数据结构实验之求二叉树后序遍历和层次遍历
- 数据结构实验之求二叉树后序遍历和层次遍历
- 2016SDAU编程练习三1004
- 第六届河南省程序设计大赛
- jquery
- Fastjson内幕
- iOS开发真机调试证书导出.p12文件
- 数据结构—二叉树后序遍历求逆
- 网站的轮播图的获取
- Android线程的创建、开启、休眠、中断
- 第十四周项目 3 数组类模板
- Flume概述
- 判断php的运行模式
- 使用Apache CXF开发Web Service步骤
- 第1课时《Qt osgEarth 编程入门》
- Browsersync的简单使用