先序中序转后序

来源:互联网 发布:dnf辅助dll源码论坛 编辑:程序博客网 时间:2024/06/06 17:58

根据先序序列,再去中序划分中序为左右子树。依次递推。。

#include <iostream>#include <string>using namespace std;string pre_in_to_post(string str_pre,string str_inorder,string left,string right,string &result);int main(){string str_pre,str_in,str_post;str_pre = "123564789";str_in = "536241879";string left,right;str_post=pre_in_to_post(str_pre,str_in,left,right,str_post);cout<<str_post;return 1;}string pre_in_to_post(string str_pre,string str_inorder,string left,string right,string &result){if (str_pre.length() == 1){return str_pre;}char root = str_pre[0];int index = str_inorder.find(root);//后面的用途当做个数!    left = pre_in_to_post(str_pre.substr(1,index),str_inorder.substr(0,index),left,right,result);right = pre_in_to_post(str_pre.substr( index+1,str_pre.size()-1-index),str_inorder.substr(index+1,str_inorder.size()-1-index ),left,right,result);return left+right+root;}
返回值,很容易转换为引用,可在深度探索c++对象模型看到
void pre_inorder_to_post(string pre,string inorder,string &post){if (pre.length() != inorder.length()){cout<<"字符串不匹配"<<endl;exit(1);}if (pre.length() <= 1){post = pre ;return ;}int index = inorder.find(pre[0]);string post_left,post_right;pre_inorder_to_post(pre.substr(1,index),inorder.substr(0,index),post);post_left = post;pre_inorder_to_post(pre.substr(index+1,pre.length()-1-index),inorder.substr(index+1,inorder.length()-1-index),post);post_right = post;post = post_left + post_right + pre[0];}


0 0
原创粉丝点击