标签:c++
给出一棵二叉树的中序与后序排列。求出它的先序排列。(约定树结点用不同的大写字母表示,长度<=8)。
每个测试文件只包含一组测试数据,每组输入包含两行,第一行输入一个字符串表示二叉树的中序排列,第二行输入一个字符串表示二叉树的后序排列。
对于每组输入数据,输出二叉树的先序排列。
BADC
BDCA
ABCD
通过后序排列确定最后一个节点是根节点
然后再通过中序排列找到根节点的左右 找到左子树和右子树的范围
而它们的范围又和后序排列左右子树的范围相同
再找左右子树的根节点 递归下去
通过前序排列输出即可。。。。。
#include<iostream> #include<cstring> using namespace std; char q[10],w[10]; void dfs(int pre_sta,int pre_end,int aft_sta,int aft_end) //分别是中序排列的起点终点 后序排列的起点终点 { int i; char node; int range; if(pre_end<pre_sta||aft_end<aft_sta) return; if(pre_sta==pre_end) //左子树或右子树只有一个节点 { cout<<q[pre_sta]; return; } node=w[aft_end]; for(i=pre_sta;i<=pre_end;i++) //找根节点再中序排列的位置 { if(q[i]==node) break; } range=i-pre_sta; cout<<node; dfs(pre_sta,i-1,aft_sta,aft_sta+range-1); //左子树 dfs(i+1,pre_end,aft_sta+range,aft_end-1); //右子树 } int main() { int len; while(cin>>q>>w) { len=strlen(q); dfs(0,len-1,0,len-1); cout<<endl; } return 0; }
标签:c++
原文地址:http://blog.csdn.net/axuan_k/article/details/41381777