求先序排列
题目描述:
给出一棵二叉树的中序与后序排列。求出它的先序排列。(约定树结点用不同的大写字母表示,长度≤8)。
主要函数:
find(x);
substr(k,len);
代码中有详细注释。
#include<iostream>
#include<stdio.h>
#include<math.h>
#include<string.h>
#include<algorithm>
#include<queue>
#include<stack>
using namespace std;
typedef long long ll;
string s,c;
void ctree(string ss,string cc,char x){
ll k=ss.find(x);//找到 x 在ss中的位置
if(ss.length()>0){
cout<<x;
string s1=cc.substr(0,k);//substr(k,len),表示在cc字符串中从 k 开始(包括 k)复制长度为 len 的字符串
string s2=cc.substr(k,ss.length()-k-1);//中序遍历中,根所在的位置 k 为后序左右子树的分割点,[0,k)为左子树,[k,len)为右子树.后序最后一个为根;
ctree(ss.substr(0,k),cc.substr(0,k),s1[k-1]);
ctree(ss.substr(k+1,ss.length()-k-1),cc.substr(k,ss.length()-k-1),s2[s2.length()-1]);//ss.substr(k)表示在ss字符串中从k开始(包括 k)复制k以后的所有字符串。
}
}
int main(){
cin>>s;
cin>>c;
ll lenc=c.length();
ctree(s,c,c[lenc-1]);
return 0;
}
415

被折叠的 条评论
为什么被折叠?



