概述
还原思想:
例1:先序序列:ABDGCEF 中序序列:DGBAECF,构造二叉树。
先序序列第一个为A,则根结点第一个为A,然后根据中序序列,DGB在A的左子树,ECF在A的右子树。
先序序列第二个为B(B在A的左子树上),则A左边连B,根据中序序列知道以B为根结点,DG为左子树,右子树空。
先序序列第三个为D(D在B的左子树),则B左边连D,根据中序序列知道以D为根结点,G为右子树,左子树为空。以此类推……
图解:
这幅图的重点在于找左先序,左中序,右先序,右中序,我看了很多博客,这篇博客的思想较通俗易懂,用来实现代码也是较好理解。
#include<iostream>
#define MaxSize 100
using namespace std;
typedef char ElementType;
typedef struct BiTNode {
ElementType data;
struct BiTNode *lchild,*rchild;
}BinTNode,*BinTree;
BinTree create_BinTree(char a[],char b[],int size) //与该节点相关的先序,与该节点相关的中序,序列中的节点个数大小
{
char c = a[0]; //记录此时根节点
if (c == '