标签:
(二叉树建立方法)
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.
Input Specification:
Each input file contains one test case. For each case, the first line contains a positive integer N (<=1000). Then N integer keys are given in the next line. All the numbers in a line are separated by a space.
Output Specification:
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.
Sample Input 1:7 8 6 5 7 10 8 11Sample Output 1:
YES 5 7 6 8 11 10 8Sample Input 2:
7 8 10 11 8 6 7 5Sample Output 2:
YES 11 8 10 7 5 6 8Sample Input 3:
7 8 6 8 5 10 9 11Sample Output 3:
NO
#include<iostream>using namespace std;struct BST {int val;BST* left;BST* right;};int a[1005], flag = 1;BST* BuildBST(int s,int e) {int i, j;if (s > e)return NULL;for ( i = s + 1; i <= e; i++) {if (a[s] <= a[i]) {break;}}for ( j = i; j <= e; j++) {if (a[s] > a[j]) {flag = 0;return NULL;}}BST *node=(BST*)malloc(sizeof(BST));node->val = a[s];node->left = BuildBST(s + 1, i - 1);node->right = BuildBST(i, e);return node;}BST* BuildMirrorBST(int s, int e) {int i, j;if (s > e)return NULL;for ( i = s + 1; i <= e; i++) {if (a[s] > a[i]) {break;}}for ( j = i; j <= e; j++) {if (a[s] <= a[j]) {flag = 0;return NULL;}}BST *node = (BST*)malloc(sizeof(BST));node->val = a[s];node->left = BuildMirrorBST(s + 1, i - 1);node->right = BuildMirrorBST(i, e);return node;}void PrintPostorder(BST* node,int cnt) {if (node == NULL) {return;}PrintPostorder(node->left,cnt+1);PrintPostorder(node->right,cnt+1);if (cnt == 0)cout << node->val;elsecout << node->val<< " " ;}int main(void) {int n;cin >> n;for (int i = 0; i < n; i++) {cin >> a[i];}BST* root = BuildBST(0, n - 1);if (flag) {cout << "YES" << endl;PrintPostorder(root,0);}else {flag = 1;BST* root = BuildMirrorBST(0, n - 1);if (flag) {cout << "YES" << endl;PrintPostorder(root,0);}else {cout << "NO" << endl;}}return 0;}
1043. Is It a Binary Search Tree (25)
标签:
原文地址:http://www.cnblogs.com/zzandliz/p/5023152.html