浙大PAT 1043题 1043. Is It a Binary Search Tree
来源:互联网 发布:李泽鹏网络剧 编辑:程序博客网 时间:2024/06/06 09:53
这题很久之前敲过一次,现在话一1个小时又敲了一次,感觉还是这次的代码简洁优美。
之前的代码:
#include<stdio.h>#include<stdlib.h>typedef struct Node{ int value; struct Node* left; struct Node* right;}Node;int num[1008];int flag;void BuildBST(Node* node,int start,int end){ if(flag==0) return; int middle=start+1; while(num[middle]<num[start]&&middle<end){ middle++; } int tmp=middle; while(num[middle]>=num[start]&&middle<end){ middle++; } if(middle!=end){ flag=0; node->left=NULL; node->right=NULL; return; } node->value=num[start]; if(tmp==start+1){ node->left=NULL; } else{ node->left=(Node*)malloc(sizeof(Node)); BuildBST(node->left,start+1,tmp); } if(tmp==end){ node->right=NULL; } else{ node->right=(Node*)malloc(sizeof(Node)); BuildBST(node->right,tmp,end); } }void BuildMirrorBST(Node* node,int start,int end){ if(flag==0) return; int middle=start+1; while(num[middle]>=num[start]&&middle<end){ middle++; } int tmp=middle; while(num[middle]<num[start]&&middle<end){ middle++; } if(middle!=end){ flag=0; node->left=NULL; node->right=NULL; return; } node->value=num[start]; if(tmp==start+1){ node->left=NULL; } else{ node->left=(Node*)malloc(sizeof(Node)); BuildMirrorBST(node->left,start+1,tmp); } if(tmp==end){ node->right=NULL; } else{ node->right=(Node*)malloc(sizeof(Node)); BuildMirrorBST(node->right,tmp,end); } }void PrintPostorderTree(Node* node){ if(node==NULL) return; PrintPostorderTree(node->left); PrintPostorderTree(node->right); printf("%d ",node->value);}void PrintPostorderRoot(Node* root){ PrintPostorderTree(root->left); PrintPostorderTree(root->right); printf("%d\n",root->value);}void dealloc(Node* node){ if(node==NULL) return; dealloc(node->left); dealloc(node->right); free(node); }int main(){ int i,n; scanf("%d",&n); for(i=0;i<n;i++){ scanf("%d",&num[i]); } flag=1; Node* root=(Node*)malloc(sizeof(Node)); BuildBST(root,0,n); if(flag){ printf("YES\n"); PrintPostorderRoot(root); dealloc(root); } else{ flag=1; dealloc(root->left); dealloc(root->right); BuildMirrorBST(root,0,n); if(flag){ printf("YES\n"); PrintPostorderRoot(root); } else{ printf("NO\n"); } dealloc(root); } return 0;}
这次的代码,还是这次的建树方法好:
#include<stdio.h>#include<stdlib.h>int arr[1005],flag;typedef struct NodeTpye{int value;struct NodeTpye* left;struct NodeTpye* right;}Node;Node* buildBST(int s,int e){int i,j;if(s>e) return NULL;for(i=s+1;i<=e;i++){if(arr[i]>=arr[s]){break;}}for(j=i+1;j<=e;j++){if(arr[j]<arr[s]){flag=0;return NULL;}}Node* node=(Node*)malloc(sizeof(Node));node->value=arr[s];node->left=buildBST(s+1,i-1);node->right=buildBST(i,e);return node;}Node* buildMirrorBST(int s,int e){int i,j;if(s>e) return NULL;for(i=s+1;i<=e;i++){if(arr[i]<arr[s]){break;}}for(j=i+1;j<=e;j++){if(arr[j]>=arr[s]){flag=0;return NULL;}}Node* node=(Node*)malloc(sizeof(Node));node->value=arr[s];node->left=buildMirrorBST(s+1,i-1);node->right=buildMirrorBST(i,e);return node;}void printPostorderTree(Node* node){if(node==NULL) return;printPostorderTree(node->left);printPostorderTree(node->right);printf("%d ",node->value);}void delloc(Node* node){if(node==NULL) return;delloc(node->left);delloc(node->right);free(node);}int main(){int i,n;scanf("%d",&n);for(i=0;i<n;i++){scanf("%d",&arr[i]);}flag=1;Node* root=buildBST(0,n-1);if(flag){printf("YES\n");printPostorderTree(root->left);printPostorderTree(root->right);printf("%d\n",root->value);delloc(root);}else{delloc(root);flag=1;Node* root=buildMirrorBST(0,n-1);if(flag){printf("YES\n");printPostorderTree(root->left);printPostorderTree(root->right);printf("%d\n",root->value);delloc(root);}else{printf("NO\n");delloc(root);}}return 0;}
0 0
- 浙大 PAT 1043. Is It a Binary Search Tree (25)
- 浙大PAT 1043题 1043. Is It a Binary Search Tree
- 浙大PAT (Advanced Level) Practise 1043Is It a Binary Search Tree (25)
- PAT A 1043. Is It a Binary Search Tree (25)
- PAT-A-1043. Is It a Binary Search Tree (25)
- pat-a 1043. Is It a Binary Search Tree (25)
- 1043. Is It a Binary Search Tree (25)—PAT
- 【PAT】1043. Is It a Binary Search Tree (25)
- PAT 1043. Is It a Binary Search Tree
- PAT-1043. Is It a Binary Search Tree(BST java)
- PAT 1043. Is It a Binary Search Tree (25)
- PAT (Advanced) 1043. Is It a Binary Search Tree (25)
- 【PAT】1043. Is It a Binary Search Tree (25)
- PAT 1043. Is It a Binary Search Tree (25)
- pat 1043. Is It a Binary Search Tree (25)
- PAT 1043. Is It a Binary Search Tree (25)
- pat 1043. Is It a Binary Search Tree (25)
- 【PAT甲级】1043. Is It a Binary Search Tree (25)
- 《影响力》摘要
- 图片轮播下获取鼠标点了哪个按钮
- TCP/IP详解学习笔记(13)-TCP坚持定时器,TCP保活定时器
- 2014年美国大学生数学建模竞赛翻译及建模思路
- String 类型中的字符替换
- 浙大PAT 1043题 1043. Is It a Binary Search Tree
- String转java.util.Date
- 得到html元素坐标
- 关于java将String类型的时间字符串转换为Date类型的问题
- 获得date类型 系统时间
- 结构体的大小
- 极端气候频现 五款开发天气预报应用的API
- 连接池
- 【Objective-C】OC中的Dealloc方法详解