标签:text 最大 swa bin oar tput c99 des div
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.我们可以直接使用sort进行排序,然后根据先序中序求后序。
2.我们可以用i,j进行把二叉树划分2个子树,进行递归求解。(参考柳神)
#include <iostream> #include <vector> using namespace std; int N; bool mirror = false; vector<int> pre, post; void getPost(int root, int tail){ if(root > tail) return ; int i = root + 1, j = tail; if(!mirror) { while(i <= tail && pre[i] < pre[root]) i++;//右子树最小的 while(j > root && pre[j] >= pre[root]) j--;//左子树最大的 }else { while(i <= tail && pre[i] >= pre[root]) i++;//右子树最小的 while(j > root && pre[j] < pre[root]) j--;//左子树最大的 } if(i - j != 1) return ; // 此时相差必为1, 否则不符合 getPost(root + 1, j); getPost(i, tail); post.push_back(pre[root]); } int main() { cin >> N; pre.resize(N); for(int i = 0; i < N; i++) cin >> pre[i]; getPost(0, N-1); if(post.size() != N) { post.clear(); mirror = true; getPost(0, N-1); } if(post.size() != N) cout << "NO"; else { cout << "YES" << endl; for(int i = 0; i < N; i++) if(i != N-1) cout << post[i] <<" "; else cout << post[i]; } system("pause"); return 0; }
PAT Advanced 1043 Is It a Binary Search Tree (25分)
标签:text 最大 swa bin oar tput c99 des div
原文地址:https://www.cnblogs.com/littlepage/p/12230017.html