测试了30个元素的斜二叉树结果是对的,但是oj仍然有问题
希望有大佬能够解答!
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define MaxSize 30
#define Null -1
typedef struct TreeNode
{
int data
;
int left
;
int right
;
} TNode
;
int pre
[MaxSize
], in
[MaxSize
];
TNode T
[MaxSize
];
void BulidTree(int prel
, int inl
, int N
, int Root
);
void PostOrderTraversal(int Root
);
int main() {
int N
;
scanf("%d\n",&N
);
char operation
[5];
char *Push
="Push";
int stack
[MaxSize
];
int top
=-1;
int num
;
int prel
, inl
, postl
;
prel
=inl
=postl
=0;
for(int i
=0; i
<2*N
; i
++) {
scanf("%s",operation
);
if(strncmp(operation
,Push
,2)==0) {
scanf("%d",&num
);
stack
[++top
]=num
;
pre
[prel
++]=num
;
} else {
num
=stack
[top
--];
in
[inl
++]=num
;
}
}
int Root
=0;
for(int i
=0; i
<N
; i
++) {
T
[i
].data
=pre
[i
];
T
[i
].left
=Null
;
T
[i
].right
=Null
;
}
prel
=inl
=postl
=0;
BulidTree(prel
, inl
, N
, Root
);
PostOrderTraversal(Root
);
return 0;
}
void BulidTree(int prel
, int inl
, int N
, int Root
) {
if(N
==0) {
return;
}
int L
=0;
int R
=0;
int i
;
for(i
=inl
; i
<N
; i
++) {
if(pre
[prel
]==in
[i
])
break;
L
++;
}
R
=N
-L
-1;
if(L
!=0) {
T
[Root
].left
=prel
+1;
}
if(R
!=0) {
T
[Root
].right
=prel
+L
+1;
}
if(L
!=0)
BulidTree(prel
+1, i
-L
, L
, prel
+1);
if(R
!=0)
BulidTree(prel
+L
+1, i
+1, R
, prel
+L
+1);
return;
}
void PostOrderTraversal(int Root
) {
if(Root
!=Null
) {
PostOrderTraversal(T
[Root
].left
);
PostOrderTraversal(T
[Root
].right
);
printf("%d",T
[Root
].data
);
if(Root
!=0) {
printf(" ");
}
}
}
)
转载请注明原文地址:https://ipadbbs.8miu.com/read-62297.html