Binary Tree Traversals(二叉树)
2010-07-17 11:24
183 查看
前序:1 2 4 7 3 5 8 9 6(已知)
中序:4 7 2 1 8 5 9 3 6(已知)
后序:7 4 2 8 9 5 6 3 1(求)
HD 1701
pk Tree Recovery
/******************************************************模拟堆栈实现*********************************************************************/
/*********数的遍历先左子树在右子树当左子树为空是递归到上一层当右子树为空时也递归到上一层,当第一次遇到该结点是写入前序,第二次遇到时写入中序,第三次遇到时写入后序,入栈(出栈)一次为遇到一次*********************************************************************************/
#include<stdio.h>
#include<string.h>
#define N 1001
int main()
{
int i,j,k,top,count,n;
int pre
,mid
,stack
;
while(scanf("%d",&n)!=EOF){
count=0;
for(i=0;i<n;i++)
scanf("%d",&pre[i]);
for(i=0;i<n;i++)
scanf("%d",&mid[i]);
for(i=0,j=0,top=0;i<n;i++){
for(k=0;k<top-1;k++){
if(mid[i]==stack[k]){
while(top!=k+1){
if(count++)printf(" ");
printf("%d",stack[--top]);
}break;
}
}
while(1){
if(stack[top-1]==mid[i])break;
stack[top++]=pre[j++];
}
}
for(i=top-1;i>=0;i--){
if(count++)printf(" ");
printf("%d",stack[i]);
}
printf("\n");
}
return 0;
}
/******************************************************递归*****************************************************************************************/
/*********如果有子树则继续递归(递归遵循先左后右)寻找第一个无子树的结点即为二叉树的后序的第一个,遍历过后可将此结点看为空,输出并返回上一层************************************************/
#include<stdio.h>
int count;
void next(int pre[],int mid[],int n)
{
int i,k;
int ppre[1001],mmid[1001];
for(i=0;pre[0]!=mid[i]&&i<n;i++);
if(i){ //有左子树
for(k=0;k<i;k++){
ppre[k]=pre[k+1];
mmid[k]=mid[k];
}
next(ppre,mmid,i); //递归
}
if(i!=n-1){ //有右子树
for(k=i+1;k<n;k++){
ppre[k-i-1]=pre[k];
mmid[k-i-1]=mid[k];
}
next(ppre,mmid,n-i-1); //递归
}
if(count++)
printf(" %d",pre[0]);
else printf("%d",pre[0]);
}
int main()
{
int pre[1001],mid[1001],i,n;
while(scanf("%d",&n)!=EOF){
count=0;
for(i=0;i<n;i++)scanf("%d",&pre[i]);
for(i=0;i<n;i++)scanf("%d",&mid[i]);
next(pre,mid,n);
printf("\n");
}
}
相关文章推荐
- 数据结构之二叉树的遍历 HDU1710 Binary Tree Traversals
- hdu1710 Binary Tree Traversals ----- 二叉树前序中序推后序
- 二叉树 遍历 hdu-1710-Binary Tree Traversals
- 杭电1710 Binary Tree Traversals(二叉树的遍历)
- HDU 1710(Binary Tree Traversals)二叉树的遍历
- Binary Tree Traversals(HDU1710)二叉树的简单应用
- HDU1710——Binary Tree Traversals(二叉树)
- hdoj 1710 Binary Tree Traversals(二叉树的建立及遍历)
- (遍历二叉树)HDU 1710 Binary Tree Traversals
- 重建二叉树 Binary Tree Traversals HDU - 1710
- HDU 1710 Binary Tree Traversals(二叉树)
- hdu_1710_Binary Tree Traversals(二叉树的重构)
- HDU 1710 Binary Tree Traversals 二叉树
- hdoj 1710 Binary Tree Traversals 【二叉树由前序和中序求后序】
- Binary Tree Traversals(二叉树_知前序中序求后序)
- HDU 1710 Binary Tree Traversals(二叉树)
- Binary Tree Traversals(二叉树)
- hdu 1701 (Binary Tree Traversals)(二叉树前序中序推后序)
- HDU 1710 Binary Tree Traversals(二叉树)
- 【二叉树之遍历的应用】HDU 1710---Binary Tree Traversals