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

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

• 本文已收录于以下专栏：

举报原因： 您举报文章：深入分析由前序和中序重构二叉树问题 色情 政治 抄袭 广告 招聘 骂人 其他 (最多只允许输入30个字)