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

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

#### Java实现重构二叉树

2015-04-12 10:31:59

#### 剑指Offer面试题6（Java版）：重建二叉树

2015-07-27 18:36:52

#### 数据结构 二叉树的重构(java实现)

2017-04-05 23:11:58

#### Java实现二叉树重构

2015-08-22 17:22:11

#### 重构二叉树（Java实现）

2016-05-11 11:02:13

#### 重构二叉树，java实现，剑指offer原题

2017-05-22 08:04:47

#### <em>二叉树</em>的重建<em>java</em>代码

2018年05月07日 00:00

#### JAVA实现重建二叉树（《剑指offer》）

2015-10-01 15:39:52

#### 剑指offer----重建二叉树---java实现

2016-07-04 17:29:39

#### java实现重建二叉树

2016-09-02 12:10:34