PTA这是二叉搜索树吗?
一、题目描述
二、解题思路
首先根据他的原规则建树,然后根据原规则相反建树。最后遍历这两棵树中是否有一颗的前序和输入序列相同,相同就输出这棵树的后序。题目很简单,就是做起来挺麻烦的。
三、代码实现
1 #include "bits/stdc++.h" 2 using namespace std; 3 struct node{ 4 int val; 5 node *left; 6 node *right; 7 }; 8 int tree[1010]; 9 vector <int> ans1; 10 vector <int> ans2; 11 vector <int> ans3; 12 node *create1(node *root,int val) 13 { 14 if(root == NULL){ 15 root = new node(); 16 root->val = val; 17 return root; 18 } 19 if(val >= root->val) 20 root->right = create1(root->right,val); 21 else 22 root->left = create1(root->left,val); 23 return root; 24 } 25 node *create2(node *root,int val) 26 { 27 if(root == NULL){ 28 root = new node(); 29 root->val = val; 30 return root; 31 } 32 if(val >= root->val) 33 root->left = create2(root->left,val); 34 else 35 root->right = create2(root->right,val); 36 return root; 37 } 38 void pre(node *root,int key) 39 { 40 if(root == NULL) 41 return; 42 if(key == 1) 43 ans1.push_back(root->val); 44 else 45 ans2.push_back(root->val); 46 pre(root->left,key); 47 pre(root->right,key); 48 } 49 void Aft(node *root) 50 { 51 if(root == NULL) 52 return; 53 Aft(root->left); 54 Aft(root->right); 55 ans3.push_back(root->val); 56 } 57 int main() 58 { 59 int n; 60 node *T1 = NULL; 61 node *T2 = NULL; 62 cin >> n; 63 for(int i = 1;i <= n;i++){ 64 cin >> tree[i]; 65 T1 = create1(T1,tree[i]); 66 T2 = create2(T2,tree[i]); 67 } 68 pre(T1,1); 69 pre(T2,2); 70 bool ok1,ok2; 71 ok1 = ok2 = true; 72 for(int i = 0;i < n;i++){ 73 if(ans1[i] != tree[i + 1]) 74 ok1 = false; 75 if(ans2[i] != tree[i + 1]) 76 ok2 = false; 77 if(!ok1 && !ok2) 78 break; 79 } 80 if(ok1 || ok2){ 81 cout << "YES" << endl; 82 if(ok1){ 83 Aft(T1); 84 int len = 1; 85 for(auto u:ans3){ 86 if(len != n) 87 cout << u << ' '; 88 else 89 cout << u << endl; 90 len++; 91 } 92 } 93 else { 94 Aft(T2); 95 int len = 1; 96 for(auto u:ans3){ 97 if(len != n) 98 cout << u << ' '; 99 else 100 cout << u << endl; 101 len++; 102 } 103 } 104 } 105 else 106 cout << "NO" << endl; 107 return 0; 108 }
本文来自博客园,作者:{scanner},转载请注明原文链接:{https://home.cnblogs.com/u/scannerkk/}

浙公网安备 33010602011771号