瞄准来总结下电子游戏前序、中序、后序遍历与互寻,假定你觉悟两个,办法追求第三种遍历办法,比较地笨的办法是折叠来电子游戏,与按照杂多的方针的特点,它也可以被课程找出。,让本人解说以下内容。

率先,让本人看一下绪言。、中序、后序遍历的特点: 
前序遍历: 
1。接见根打包
2。先序遍历左子树
三.先序遍历右子树
中序遍历: 
1。左子树的次遍历
2。接见根打包
三.右子树的次遍历
后序遍历: 
1。左子树的后序遍历
2。右子树的后序遍历
三.接见根打包

一、已知前序、中序遍历,后序遍历

例:

前序遍历:         GDAFEMHZ

中序遍历:         ADEFGHMZ

画树的办法:
第一步,按照前序遍历的特点,本人觉悟根打包是G。

次货移动骤,庆祝中序遍历adefghmz。在根打包G靠人行道的ADEF一定是左子树,在G的右翼的HMZ一定是R的右子树。

 第三步,的左子树ADEF庆祝,在左翼的子树的根打包霉臭是B的根leftchild。在前序遍历,对大树根后根leftchild,像如此,左子树的根打包是d。。

四分之一步,异样的原则,根打包的右子树的根打包在HMZ也可以穿越。在前序遍历,霉臭在持有子子树打包预先阻止遍历右方的子树。,第每一遍历左子树的打包是。同样地,右子树遍历的第每一打包是。

第五步,庆祝和撞见,下面的奔流是复回的。。。率先查找目前的树的根打包。,与它被分为左子树。,右子树,与进入左子树反复下面的奔流。。,与进入右方的的子树并反复下面的奔流。基本事实,一棵树可以被使康复。。下面所说的事移动复回的奔流可以束紧的地表达列举如下:

1 决定根,决定左子树,决定右方的的子树。

2 左子树复回。

3 右子树打中复回。

4 誊写版印刷机目前的根记载记载。

这么,本人可以折叠下面所说的事电子游戏的形成:

这么,本后序的遍历裁决,本人可以觉悟,后序遍历阶数:AEFDHZMG

课程求法:(按照下面的思索,写作复回顺序

 1 #include   
 2 #include   
 3 #include   
 4 
 5 struct 树打包
 6 {
 7   struct 树打包* left;
 8   struct 树打包* right;
 9   char  elem;
10 };
11 
12 void BinaryTreeFromOrderings(char* inorder, char* preorder, int 按大小排列)
13 {
14   假定(按大小排列 == 0)
15     {
16       //cout<<"invalid length";
17       return;
18     }
19   树打包* node = new 树打包;//Noice that [新] should be written 出。
20   node->elem = *preorder;
21   int rootIndex = 0;
22   for(;rootIndex < length; rootIndex++)
23     {
24       if(inorder[rootIndex] == *preorder)
25       break;
26     }
27   //Left
28   BinaryTreeFromOrderings(inorder, preorder +1, rootIndex);
29   //Right
30   BinaryTreeFromOrderings(inorder + rootIndex + 1, preorder + rootIndex + 1, length - (rootIndex + 1));
31   cout<elem<

输入的出席:AEFDHZMG

二、已知阶和后序各态历经性质,求前序遍历

这依然是下面的成绩。,在这场合本人只赡养中枢次和后序遍历。:

中序遍历:       ADEFGHMZ

后序遍历:       AEFDHZMG

画树的办法:
第一步,按后序遍历的特点,本人觉悟基本事实每一打包遍历基本事实每一打包作为根打包。,那是,根打包是G。

次货移动骤,庆祝中序遍历adefghmz。在根打包G靠人行道的ADEF一定是左子树,在G的右翼的HMZ一定是R的右子树。

第三步,的左子树ADEF庆祝,在左翼的子树的根打包霉臭是B的根leftchild。在前序遍历,对大树根后根leftchild,像如此,左子树的根打包是d。。

四分之一步,异样的原则,根打包的右子树的根打包在HMZ也可以穿越。前后次遍历,霉臭在持有子子树打包预先阻止遍历右方的子树。,第每一遍历左子树的打包是。同样地,右子树遍历的第每一打包是。

第五步,庆祝和撞见,下面的奔流是复回的。。。率先查找目前的树的根打包。,与它被分为左子树。,右子树,与进入左子树反复下面的奔流。。,与进入右方的的子树并反复下面的奔流。基本事实,一棵树可以被使康复。。下面所说的事移动复回的奔流可以束紧的地表达列举如下:

1 决定根,决定左子树,决定右方的的子树。

2 左子树复回。

3 右子树打中复回。

4 誊写版印刷机目前的根记载记载。

如此,本人就可以折叠电子游戏的形成,如上图所示,不从事它了。。

这么,前序遍历:         GDAFEMHZ

课程求法:(并承认本人的出席右方的的。

#include 
#include 
#include 

struct 树打包
{
    struct 树打包* left;
    struct 树打包* right;
    char  elem;
};


树打包* BinaryTreeFromOrderings(char* inorder, char* aftorder, int 按大小排列)
{
    假定(按大小排列 == 0)
    {
        return NULL;
    }
    树打包* node = new 树打包;//Noice that [新] should be written 出。
    node->elem = *(aftorder+length-1);
    std::cout<elem<left = BinaryTreeFromOrderings(inorder, aftorder , rootIndex);
    node->right = BinaryTreeFromOrderings(inorder + rootIndex + 1, aftorder + rootIndex , length - (rootIndex + 1));
    
    return node;
}

int 首要(int argc, char** argv)
{
    char* af="AEFDHZMG";    
    char* in="ADEFGHMZ"; 
    BinaryTreeFromOrderings(in, af, 8); 
    printf(\n)
    return 0;
}

输入奏效:GDAFEMHZ