POJ 2255(二叉树问题)

来源:互联网 发布:电火花线切割如何编程 编辑:程序博客网 时间:2024/06/04 20:08

题意:根据前序遍历和中序遍历求后序遍历

结题报告:说真的,我对二叉树还是不太能理解,遇到这种题我就不会做,不过看了其他人写的代码,我慢慢的理解了大部分

(转载)递归求解,先根据先序找到根节点,再在中序中找到根节点,根据根节点再中序中的位置分别把先序和中序分成两个子树。(例如:DBACEGF ABCDEFG 第一次找到根节点为D,D在中序中第4个位置,分别把先序分成BAC和EGF,再把中序分成ABC和EFG)利用递归对其求解,得到整个树,再对其进行后序遍历即得到结果。

粘贴一下别人的代码:

#include <iostream>#include <stdio.h>#include <string>using namespace std;struct node{    char data;    node *lchirld;    node *rchirld;};node *create(string pre,string in){    node *root;    root=NULL;    if(pre.length()>0)    {        root=new node;        root->data=pre[0];        int index=in.find(root->data);        root->lchirld=create(pre.substr(1,index),in.substr(0,index));        root->rchirld=create(pre.substr(index+1),in.substr(index+1));    }    return root;}void postorder(node *root)//原本用(node *&root),可是我不明白为什么,我去掉“&”时也AC了{    if(root!=NULL)    {        postorder(root->lchirld);        postorder(root->rchirld);        cout<<root->data;    }}int main(){    string pre,in;    while(cin>>pre>>in)    {        node *root;        root=create(pre,in);        postorder(root);        cout<<endl;    }    return 0;}
//_____(转载)

另外在本题中用到了string文件库的两个函数find()与substr();
具体解释如下:
是s.find(args)在S中查找args第一次出现的位置下标。而substr()有以下几种操作
1、s.substr(pos,n) 返回一个string类型的字符串,它包含s中从下标pos开始的n个字符。
2、s.substr(pos) 返回一个string类型的字符串,它包含从下标pos开始到s末尾的所有字符。
3.s.substr()返回s的副本。


原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 发现自己被三了怎么办 被扇巴掌脸肿了怎么办 分到上海市金鼎学校怎么办 被列入维稳对象怎么办? 资金涉及诈骗案冻结了怎么办 小米浏览器浏览记录找不到了怎么办 米聊账号封了怎么办 管家婆创业版管理员忘记密码怎么办 手机不记得密码了怎么办 手机不记得开锁密码怎么办 oppo手机不记得密码怎么办 电脑密码不记得了怎么办 vivo手机不记得密码了怎么办 运管把车扣了怎么办 大学通选课挂科怎么办 通识必修课挂了怎么办 我想开3d艺术馆怎么办 档案回原籍报到证怎么办 服刑的人孩子上学怎么办 长沙终身教育网用户名忘记了怎么办 乡下卖服装没生意怎么办 没能力没学历该怎么办 没有学历的我该怎么办 补过的牙掉了怎么办 法院判完被告不给钱怎么办 b证到期未继续教育怎么办 宝宝上幼儿园中午要用尿不湿怎么办 嫁到北京农村怎么办居住证 2020年没脱贫的农民怎么办 2020年农民的土地怎么办 车停在停车场被划怎么办 专升本差两分怎么办 入职需要学士学位证怎么办 不喜欢写科研项目又没编制怎么办 易学堂密码忘了怎么办 易班手机号换了怎么办 易班登录不上怎么办 易到手机号换了怎么办 海外留学没有教育部认证怎么办 七过月宝宝便秘怎么办 6个月孩子便秘怎么办