PAT1020 一个case出现段错误,可是我找不到

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
//PAT1020 二叉树 建树 层序遍历
#include<stdio.h>
#include<stdlib.h>
#include <iostream>
#include <queue>
using namespace std;
typedef int ElementType ;
typedef struct TNode *Position;
typedef Position BinTree;
struct TNode{
    ElementType Data;
    BinTree Left;
    BinTree right;
};
 
Position BuildTree(ElementType InOrder[],ElementType PostOrder[],int n){
    if(n==0)
    return NULL;
      
    struct TNode* root=(struct TNode*)malloc(sizeof(struct TNode));
    root->Data=PostOrder[n-1];
     
    int n1;
    for(int i=0;i<n;i++)
    if(InOrder[i]==PostOrder[n-1])
    n1=i;
     
    root->Left=BuildTree(InOrder,PostOrder,n1);
    root->right=BuildTree(InOrder+n1+1,PostOrder+n1,n-n1-1);
     
    return root;
}
 
void LeverOrderTraversals(BinTree BT){//copy from mooc! 抄错了一次 line49  T->Left 不是BT->left
    int flag=0;
    queue<struct TNode>q;
    BinTree T;
    if(!BT) return;
    q.push(*BT);
    while(!q.empty()){
        T=&q.front();
        q.pop();
        if(!flag){
            flag=1;
            printf("%d",T->Data);
        }
        else
        printf(" %d",T->Data);
        if(T->Left) q.push(*T->Left);
        if(T->right) q.push(*T->right);
    }  
};
 
 
int main(){
        int n;
        ElementType PostOrder[300],InOrder[300];
        scanf("%d",&n);
        for(int i=0;i<n;i++)
        scanf("%d",&PostOrder[i]);
        for(int i=0;i<n;i++)
        scanf("%d",&InOrder[i]);
         
        Position root=BuildTree(InOrder,PostOrder,n);
        LeverOrderTraversals(root);
         
        return 0;
}

  

posted on   SijingLin  阅读(394)  评论(0编辑  收藏  举报

努力加载评论中...

导航

点击右上角即可分享
微信分享提示