PAT A 1043

xiaoxiao2021-02-28  99

#include <stdio.h> #include <malloc.h> #define maxn 1010 typedef struct TiNode { struct TiNode *lchild,*rchild; int data; }*BiTree; int origin[maxn],pre[maxn],prem[maxn],post[maxn],postm[maxn]; int pre_n=0,prem_n=0,post_n=0,postm_n=0; void insert(BiTree *root,int data) { if((*root)==NULL)//到达空节点时,为需要插入的节点 { (*root)=(BiTree)malloc(sizeof(struct TiNode));//建立一个新节点 (*root)->data=data; (*root)->lchild=(*root)->rchild=NULL;//每次插入一个新节点的时候,左右孩子都为空 return ; } if( (*root)->data > data ) insert(&(*root)->lchild,data);//左子树小于根节点 else insert(&(*root)->rchild, data);//右子树大于等于等节点 } void preOrder(BiTree root)//这里是指先序遍历 { if(root==NULL) return ; pre[pre_n++]=root->data; preOrder(root->lchild); preOrder(root->rchild); } void preOrderM(BiTree root) { if(root==NULL) return ; prem[prem_n++]=root->data; preOrderM(root->rchild); preOrderM(root->lchild); } void postOrder(BiTree root)//这里是指后序遍历 { if(root==NULL) return ; postOrder(root->lchild); postOrder(root->rchild); post[post_n++]=root->data; } void postOrderM(BiTree root)//这里是指后序遍历 { if(root==NULL) return ; postOrderM(root->rchild); postOrderM(root->lchild); postm[postm_n++]=root->data; } int main() { int i,n,data,pre_flag=1,prem_flag=1; //BiTree pre_root,post_root,prem_root,postm_root; BiTree root=NULL; scanf("%d",&n); for(i=0;i<n;i++) { scanf("%d",&data); origin[i]=data; insert(&root,data); } preOrder(root); preOrderM(root); postOrder(root); postOrderM(root); for(i=0;i<n;i++) { if(origin[i]!=pre[i]) { pre_flag=0; break; } } for(i=0;i<n;i++) { if(origin[i]!=prem[i]) { prem_flag=0; break; } } if(pre_flag==1) { printf("YES\n"); for(i=0;i<n;i++) { printf("%d",post[i]); if(i<n-1) printf(" "); } } else if(prem_flag==1) { printf("YES\n"); for(i=0;i<n;i++) { printf("%d",postm[i]); if(i<n-1) printf(" "); } } else printf("NO"); return 0; }
转载请注明原文地址: https://www.6miu.com/read-20571.html

最新回复(0)