# 深入分析由前序和中序重构二叉树问题

508人阅读 评论(0)

ACFKDBUMWS

KFDCAUBWMS

step1

step2

KFDC 根节点左边
UBWMS 根节点右边

CFKD 是左边
BUMWS是右边
step 3

struct node
{
char data;
struct node* left;
struct node* right;
}

struct node* creat(前序遍历字符串f，中序遍历字符串m)
{
struct node n;
n.data=从f中获取根；
fl=前序遍历根的左边；
fr=前序遍历根的右边；
ml=中序遍历根的左边；
mr=中序遍历根的右边；
n.left=creat(fl.ml);
n.right=creat(fr,mr);

return  n;


}

ABC

BAC

f=“ABC”; m=“BAC”
fl=‘B’ ；fr=’C’
ml=’B’ ; mr=’C’

f=‘B’；m=‘B’

struct node
{
char data;
struct node* left;
struct node* right;
}

struct node* creat(前序遍历字符串f，中序遍历字符串m)
{
struct node n;
n.data=从f中获取根；
fl=前序遍历根的左边；
fr=前序遍历根的右边；
ml=中序遍历根的左边；
mr=中序遍历根的右边；
if(左子树长度==0)
{
n.left=NULL;
}
else
n.left=creat(fl.ml);
if(右子树长度==0)
{
n.right=NULL;
}
else
{
n.right=creat(fr,mr);
}

return  n;
}

c代码实现

#include <iostream>
#include <fstream>
#include <string>
#include <algorithm>

using namespace std;

typedef struct node
{
char data;
struct node* left;
struct node* right;
}NODE;

//qian creat
NODE* creat_node(string &f,string &m)
{
char c;
string fl,fr;
string ml,mr;
int local;
c=f[0];
if(c>'Z' || c<'A')
{
cout<<"error data"<<endl;
exit(-1);
}

local=m.find(c);
if(local == -1)
{
cout<<"not find local"<<endl;
exit(-1);
}
ml=m.substr(0,local);
mr=m.substr(local+1,m.size()-1-local);
fl=f.substr(1,ml.size());
fr=f.substr(fl.size()+1,mr.size());

NODE* node=new NODE;
node->data  = c;

if(local == 0)
node->left = NULL;
else
node->left  = creat_node(fl,ml);
if((m.size()-1-local)==0)
node->right = NULL;
else
node->right = creat_node(fr,mr);
return node;

}

void front_search(NODE* root)
{
if(root == NULL)
return;
NODE node=*root;
cout<<node.data;
front_search(node.left);
front_search(node.right);
}

void back_search(NODE* root)
{
if(root == NULL)
{
return ;
}
NODE node = *root;
back_search(node.left);
back_search(node.right);
cout<<node.data;
}
int main()
{
string front;
string mid;
freopen("t.txt","r",stdin);
{
exit(-1);
}

getline(cin,front);
getline(cin,mid);

return 0;
}

ABC
BAC
FDXEAG
XDEFAG

BCA
XEDGAF

1
0

【直播】机器学习&数据挖掘7周实训--韦玮
【套餐】系统集成项目管理工程师顺利通关--徐朋
【直播】3小时掌握Docker最佳实战-徐西宁
【套餐】机器学习系列套餐（算法+实战）--唐宇迪
【直播】计算机视觉原理及实战--屈教授
【套餐】微信订阅号+服务号Java版 v2.0--翟东平
【直播】机器学习之矩阵--黄博士
【套餐】微信订阅号+服务号Java版 v2.0--翟东平
【直播】机器学习之凸优化--马博士
【套餐】Javascript 设计模式实战--曾亮

* 以上用户言论只代表其个人观点，不代表CSDN网站的观点或立场
个人资料
• 访问：56416次
• 积分：2028
• 等级：
• 排名：第18900名
• 原创：136篇
• 转载：8篇
• 译文：0篇
• 评论：7条
阅读排行
评论排行
最新评论