【问题描述】
给定一个正整数序列,采用先序方式构建该二叉树,判定该树是否为二叉排序树,是则输出序列最后一个整数,否则输出序列第一个整数。
【输入形式】
元素之间采用空格分隔,空用 -1表示
【输出形式】
是二叉排序树输出序列最后一个整数,否则输出序列第一个整数。
【样例输入】
10 8 -1 -1 12 -1 -1
【样例输出】
12
【样例输入】
10 12 -1 -1 8 -1 -1
【样例输出】
10
C++代码
#include<iostream>
using namespace std;
#include<limits.h>
int pre = -1, cnt = 0, A[100];
struct tree {
int data;
tree* lchild, * rchild;
};
tree* Create() {
tree* t;
int data;
cin >> data;
if (data == -1)
t = NULL;
else {
t = new tree;
t->data = data;
A[cnt++] = data;
t->lchild = Create();
t->rchild = Create();
}
return t;
}
bool IsBST(tree* t) {
if (t == NULL) return true;
bool flag = IsBST(t->lchild);
if (t->data < pre || flag == false) return false;
else pre = t->data;
flag = IsBST(t->rchild);
return flag;
}
int main() {
tree* t = Create();
if (IsBST(t)) cout << A[cnt - 1] << endl;
else cout << t->data << endl;
return 0;
}