树 知道中序遍历 层次遍历 求先序遍历
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了树 知道中序遍历 层次遍历 求先序遍历相关的知识,希望对你有一定的参考价值。
参考技术A 其实对于知道中序和先、后、层次之一求出树结构的基本思路都是一样的,都是根据后一种序列能直接找出根节点,从而将中序划分为两部分,然后再找出各自的根节点。对于层序12345......而言,1一定是根节点,那么中序可以划分出(...)1(...),(...)1,1(...)三种可能的情况,假设是第一种。
那么23一定分别是左右两颗子树的根,假设再划分出的情况是(...)21(...)3(...)。
那么456一定是按顺序是从左往右那三颗子树的根节点。
以此类推。知道了树结构再求先序也不难了吧。
提供思路,具体代码还是自己写比较好,这也是一种锻炼。本回答被提问者采纳 参考技术B 这个算法可以根据输入的先序 和 中序遍历求后序遍历
void fff(int a,int b,int c)
int j;
if(b>c)
return;
if(b==c)
printf("%c",n[b]);
x++;
return;
for(j=b;j<=c;j++)
if(n[j]==m[a])
x++;
fff(x,b,j-1);
fff(x,j+1,c);
printf("%c",n[j]);
break;
int main ()
int i;
while(scanf("%s%s",m,n)!=EOF)
x=0;
l=strlen(m);
fff(0,0,l-1);
printf("\n");
return 0;
请采纳答案,支持我一下。追问
呵呵,我不是要这个,有了中序和前序我也可以找后序,就是不知道怎么有中序和层次遍历找前序而已,还有这个你是复制别人的,我之前看过这个程序
codevs 1013 求先序排列(二叉树遍历)
Description
给出一棵二叉树的中序与后序排列。求出它的先序排列。(约定树结点用不同的大写字母表示,长度<=8)。
Input
两个字符串,分别是中序和后序(每行一个)
Output
一个字符串,为二叉树的先序序列
Sample Input
BADC
BDCA
Sample Output
ABCD
思路
我们知道,前序遍历(PreOrder):根节点->左子树->右子树;中序遍历(InOrder):左子树->根节点->右子树;(PostOrder)后序遍历:左子树->右子数->根节点。故PostOrder的最后一个数为树根。由PostOrder找出树根后,可根据InOrder中分出树根的左右子树。InOrder中,树根左边为其左子树,右边为右子树。例如样例中:
in : BADC
post:BDCA
左子树为B,右子树为DC;在InOrder中找根的位置pos;
则左子树中序序列为In.substr(0,pos),后序序列为Post.substr(0,pos)
右子树的先序序列为In.subst(pos+1,len-pos-1),后序序列为post.substr(pos,len-pos-1)
通过递归不断重复以后步骤,当串为空时退出
#include<bits/stdc++.h> using namespace std; string in,post; void pre(string in,string post) { if (post.empty()) return; int pos,len = post.size(); char ch = post[len-1]; cout << ch; pos = in.find(ch); pre(in.substr(0,pos),post.substr(0,pos)); pre(in.substr(pos + 1,len - pos - 1),post.substr(pos,len - pos - 1)); } int main() { cin >> in >> post; pre(in,post); return 0; }
#include<bits/stdc++.h> using namespace std; const int maxn = 15; void pre(int N,char a[],char b[]) { if (N <= 0) return; int pos; for (int i = 0;i < N;i++) if (a[i] == b[N-1]) pos = i; printf("%c",b[N-1]); pre(pos,a,b); pre(N - pos - 1,a + pos + 1,b + pos); } int main() { char a[maxn],b[maxn]; scanf("%s %s",a,b); int len = strlen(a); pre(len,a,b); return 0; }
以上是关于树 知道中序遍历 层次遍历 求先序遍历的主要内容,如果未能解决你的问题,请参考以下文章