当前位置: 代码迷 >> 综合 >> P1030 求先序排列(二叉树,中后序建树,前序遍历)
  详细解决方案

P1030 求先序排列(二叉树,中后序建树,前序遍历)

热度:68   发布时间:2024-01-25 14:45:11.0

题意

给定一棵二叉树的中序和后序遍历,输出这棵树的前序遍历。

题解

第一句话:我说后序遍历最后面的一位绝对是根节点。
第二句话:我说中序遍历根节点左边的都是根的左子树。
第三句话:我说中序遍历根节点右边的都是根的右子树。
这三句话就够了。
找根,把左子树找出来,把右子树找出来,递归。
不懂怎么写的看代码。

代码

#include<cstring>
#include<iostream>
using namespace std;
void Build(string b,string c)
{int len=(b.size()+c.size())>>1;if(len==0)return;int rootc=c.size()-1;int rootb=-1;for(int i=0;i<len;++i)if(b[i]==c[rootc])rootb=i;string bl;for(int i=0;i<rootb;++i)bl+=b[i];string br;for(int i=rootb+1;i<len;++i)br+=b[i];string cl;for(int i=0;i<c.size();++i)for(int j=0;j<bl.size();++j)if(c[i]==bl[j])cl+=c[i];string cr;for(int i=0;i<c.size();++i)for(int j=0;j<br.size();++j)if(c[i]==br[j])cr+=c[i];cout<<c[rootc];Build(bl,cl);Build(br,cr);
}
int main()
{string B,C;cin>>B>>C;Build(B,C);return 0;
}