二叉树--已知先序中序求后序--已知中序后序求先序(基本按照网上某大神思路搬过来的)

Posted 抓不住Jerry的Tom

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了二叉树--已知先序中序求后序--已知中序后序求先序(基本按照网上某大神思路搬过来的)相关的知识,希望对你有一定的参考价值。

思路来自(转载自)  http://www.cnblogs.com/fzhe/archive/2013/01/07/2849040.html

题目描述不说了。

前序遍历:  GDAFEMHZ

中序遍历:  ADEFGHMZ

求中序遍历。

1 确定根,确定左子树,确定右子树。

2 在左子树中递归。

3 在右子树中递归。

4 打印当前根。

代码如下:

 1 #include <bits/stdc++.h>
 2 
 3 using namespace std;
 4 char pr[1000],in[1000];
 5 int l;
 6 struct TreeNode
 7 {
 8     struct TreeNode* left;
 9     struct TreeNode* right;
10     char elem;
11 };
12 void BinTreeFromOrder(char* inorder,char* preorder,int length)
13 {
14     if (length==0)
15     return ;
16     TreeNode* node =new TreeNode;
17     node->elem= *preorder;
18     int rootIndex=0;
19     for (;rootIndex<length;rootIndex++)
20     {
21         if (inorder[rootIndex]==*preorder)
22         break;
23     }
24     BinTreeFromOrder(inorder,preorder+1,rootIndex);
25     BinTreeFromOrder(inorder+rootIndex+1,preorder+rootIndex+1,length-1-rootIndex);
26     printf("%c",node->elem);
27 }
28 int main()
29 {
30     //freopen("de.txt","r",stdin);
31     scanf("%s",pr);
32     scanf("%s",in);
33     l=strlen(pr);
34     BinTreeFromOrder(in,pr,l);
35     printf("\\n");
36     return 0;
37 }

中序遍历:  ADEFGHMZ

后序遍历:  AEFDHZMG

1 确定根,确定左子树,确定右子树。

2 在左子树中递归。

3 在右子树中递归。

4 打印当前根。

代码如下:

 1 #include <bits/stdc++.h>
 2 
 3 using namespace std;
 4 char af[1000],in[1000];
 5 int l;
 6 struct TreeNode
 7 {
 8     struct TreeNode* left;
 9     struct TreeNode* right;
10     char elem;
11 };
12 TreeNode* BinTreeFromOrder(char* inorder,char* aftorder,int length)
13 {
14     if (length==0)
15     return NULL;
16     TreeNode* node =new TreeNode;
17     node->elem= *(aftorder+length-1);
18     printf("%c",node->elem);
19     int rootIndex=0;
20     for (;rootIndex<length;rootIndex++)
21     {
22         if (inorder[rootIndex]==*(aftorder+length-1))
23         break;
24     }
25     node->left=BinTreeFromOrder(inorder,aftorder,rootIndex);
26     node->right=BinTreeFromOrder(inorder+rootIndex+1,aftorder+rootIndex,length-1-rootIndex);
27 }
28 int main()
29 {
30     //freopen("de.txt","r",stdin);
31     scanf("%s",in);
32     scanf("%s",af);
33     l=strlen(in);
34     BinTreeFromOrder(in,af,l);
35     printf("\\n");
36     return 0;
37 }

PS : 已知前序、后序,求中序结果不唯一!!!

以上是关于二叉树--已知先序中序求后序--已知中序后序求先序(基本按照网上某大神思路搬过来的)的主要内容,如果未能解决你的问题,请参考以下文章

已知先序中序求后序的算法:

已知先序和中序 求后序

PAT A1086 Tree Traversals Again [二叉树前序中序求后序]

已知前序和中序求后序,已知中序和后序求先序。

二叉树中,啥是前序,中序。后序!

已知前序中序求后序-二叉树