Given a list of integers, we can build a binary search tree by inserting them one by one, then compute the height. The input has two lines: the first line is an integer n, the second line contains n integers, for example,
3
5 3 9
The output is the height of the binary search tree in one line. In this case, the output is
1
#include <iostream>
#include <stack>
#include <vector>
#include <algorithm>
using namespace std;
typedef int T;
struct BinaryNode{
T data;
BinaryNode *left, *right;
BinaryNode(T d, BinaryNode *l=NULL, BinaryNode* r=NULL):data(d), left(l), right(r) {};
};
int height(BinaryNode* root){
int leftheight,rightheight;
if(root==NULL) return -1;
else{
leftheight = height(root->left);
rightheight = height(root->right);
return (leftheight>rightheight)? (leftheight+1) : (rightheight+1);
}
}
void recursive_insert(BinaryNode* &p, int data){
if(p == NULL){
p = new BinaryNode(data);
}
else if(data < p->data){
recursive_insert(p->left,data);
}
else if(data > p->data){
recursive_insert(p->right,data);
}
}
void BST_insert(BinaryNode* &root,int data){
recursive_insert(root, data);
}
int main(){
int n;cin>>n;
//vector<int> v;
int t;
BinaryNode* root = NULL;
for (int i = 0; i < n; ++i)
{
cin>>t;
BST_insert(root,t);
}
cout<<height(root)<<endl;
}