标签:numbers -o with follow clu false seq problem span
A Binary Search Tree (BST) is recursively defined as a binary tree which has the following properties:
If we swap the left and right subtrees of every node, then the resulting tree is called the Mirror Image of a BST.
Now given a sequence of integer keys, you are supposed to tell if it is the preorder traversal sequence of a BST or the mirror image of a BST.
Each input file contains one test case. For each case, the first line contains a positive integer N (≤). Then N integer keys are given in the next line. All the numbers in a line are separated by a space.
For each test case, first print in a line YES
if the sequence is the preorder traversal sequence of a BST or the mirror image of a BST, or NO
if not. Then if the answer is YES
, print in the next line the postorder traversal sequence of that tree. All the numbers in a line must be separated by a space, and there must be no extra space at the end of the line.
7
8 6 5 7 10 8 11
YES
5 7 6 8 11 10 8
7
8 10 11 8 6 7 5
YES
11 8 10 7 5 6 8
7
8 6 8 5 10 9 11
NO
判断是否是是二叉搜索树或镜像二叉搜索树。
1 #include <bits/stdc++.h> 2 3 using namespace std; 4 int n, an[1005]; 5 6 struct Node 7 { 8 int val; 9 Node *left; 10 Node *right; 11 }*head; 12 int pre[1005]; 13 int pos = 0; 14 15 void insert(Node* &root, int x){ 16 if(root == NULL){ 17 root = new Node; 18 root->val = x; 19 root->left = NULL; 20 root->right = NULL; 21 }else{ 22 if(x < root->val){ 23 insert(root->left, x); 24 }else{ 25 insert(root->right, x); 26 } 27 } 28 } 29 30 void prefind(Node * &root){ 31 if(root != NULL){ 32 pre[pos++] = root->val; 33 prefind(root->left); 34 prefind(root->right); 35 } 36 } 37 38 void premirror(Node * &root){ 39 if(root != NULL){ 40 pre[pos++] = root->val; 41 premirror(root->right); 42 premirror(root->left); 43 } 44 } 45 46 void behind(Node * &root){ 47 if(root != NULL){ 48 behind(root->left); 49 behind(root->right); 50 pre[pos++] = root->val; 51 } 52 } 53 54 void mirror(Node * &root){ 55 if(root != NULL){ 56 mirror(root->right); 57 mirror(root->left); 58 pre[pos++] = root->val; 59 } 60 } 61 62 63 int main(){ 64 cin >> n; 65 for(int i = 0; i < n; i++){ 66 cin >> an[i]; 67 insert(head, an[i]); 68 } 69 bool flag = true; 70 prefind(head); 71 for(int i = 0; i < n; i++){ 72 if(pre[i] != an[i]){ 73 flag = false; 74 break; 75 } 76 } 77 memset(pre,0,sizeof(pre)); 78 if(flag){ 79 pos = 0; 80 behind(head); 81 cout <<"YES"<<endl; 82 for(int i = 0; i < n; i++) 83 printf("%d%c", pre[i], i==n-1?‘\n‘:‘ ‘); 84 return 0; 85 } 86 pos = 0; 87 flag = true; 88 memset(pre,0,sizeof(pre)); 89 premirror(head); 90 for(int i = 0; i < n; i++){ 91 if(pre[i] != an[i]){ 92 flag = false; 93 break; 94 } 95 } 96 memset(pre,0,sizeof(pre)); 97 if(flag){ 98 pos = 0; 99 mirror(head); 100 cout <<"YES"<<endl; 101 for(int i = 0; i < n; i++) 102 printf("%d%c", pre[i], i==n-1?‘\n‘:‘ ‘); 103 return 0; 104 } 105 cout <<"NO"<<endl; 106 return 0; 107 }
1043 Is It a Binary Search Tree (25 分)
标签:numbers -o with follow clu false seq problem span
原文地址:https://www.cnblogs.com/zllwxm123/p/11156565.html