【问题描述】
已知二叉树的先序和中序遍历序列,推出它的后序遍历序列。
输入: 共两行,第1行一一个字符串,表示树的先序遍历,第2行一个字符串,表示树的中序遍历。树的结点一律用小写字母表示。
输出: 仅一行,表示树的后序遍历序列。
【样例输入】
abdec
dbeac
【样例输出】
debca
#include<iostream> #include<cstring> using namespace std; char pre[101], mid[101]; int root=0, cnt=0,n; // 分别表示根节点的下标、编号和个数。 struct node{ char value; // 节点名称。 int lchild, rchild; } data[101]; // 声明node类型的数组data。 int create(int preL, int preR, int midL, int midR, int rt){ if(preL>preR) return 0; // 递归的边界条件。 rt=++cnt; // 找到每个根节点的位置index。 int index; for(int i=midL; i<=midR; i++){ if(mid[i]==pre[preL]) { index=i; break; } } data[rt].value=mid[index]; int numLeft = index-midL; data[rt].lchild=create(preL+1, preL+numLeft, midL, index-1, rt); data[rt].rchild=create(preL+numLeft+1, preR, index+1, midR, rt); return rt; } void rootPos(int rt){ if(rt){ rootPos(data[rt].lchild); rootPos(data[rt].rchild); cout<<data[rt].value; } return; } int main(){ cin>>pre>>mid; n=strlen(pre); int root = create(0, n-1, 0, n-1, 0); // 分别传入先序和中序的左端元素和右端元素的下标与根节点的下标。 rootPos(root);// 后序遍历输出:寻找节点的位置。 return 0; }
标签:遍历,建立,int,中序,二叉树,101,节点,先序 来源: https://www.cnblogs.com/dks0313/p/16513510.html
本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享; 2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关; 3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关; 4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除; 5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。