1. BST
Time Limit: 2000MS Memory Limit: 65536K
Description
给出一个整数序列,请按照顺序建立二叉查找树(BST),然后输出这颗二叉树的高度。
例:输入顺序为37,24,42,32,7,40,2,42,120。对应的二叉查找树如下所示。
输出的高度为:4
输入格式:
首先输入整数N,表示N种测试情况。接下来是每种测试情况的输入数据。
每种测试情况有一行,即整数序列。
输出格式:
每种测试情况对应一行输出树的高度。
输入示例:
2
37,24,42,32,7,40,2,42,120
120,42,7,2,32,42,24,37,40
输出示例:
4
6
代码如下:
#include<iostream>
#include<string>
using namespace std;
class BinNodeptr{
public:
int it;
BinNodeptr* Left;
BinNodeptr* Right;
public:
BinNodeptr(){
Left=Right=NULL;
}
BinNodeptr(int value,BinNodeptr* l=NULL,BinNodeptr* r=NULL){
Left=l;
Right=r;
it=value;
}
~BinNodeptr(){}
int& val(){
return it;
}
void setVal(const int value){
it=value;
}
BinNodeptr* left()const{
return Left;
}
BinNodeptr* right()const{
return Right;
}
void setLeft(BinNodeptr* node=NULL){
Left=node;
}
void setRight(BinNodeptr* node=NULL){
Right=node;
}
bool isleaf(){
return (Left==NULL)&&(Right==NULL);
}
};
class BST:public BinNodeptr{
public:
BinNodeptr* root;
int nodecount;
int height;
public:
BST(){
root=NULL;
nodecount=0;
height=0;
}
~BST(){}
BinNodeptr* insert(BinNodeptr*& root,BinNodeptr* node){
if(root==NULL){
root=node;
return root;
}
else{
if(node->val()<root->val()&&root->left()==NULL){root->setLeft(node);return root;}
if(node->val()>=root->val()&&root->right()==NULL){root->setRight(node);return root;}
if(node->val()<root->val()&&root->left()!=NULL)insert(root->Left,node);
if(node->val()>=root->val()&&root->right()!=NULL)insert(root->Right,node);
}
}
int max(int m,int n){
if(m>=n)return m;
return n;
}
int bstheight(BinNodeptr* root){
if(root==NULL)return 0;
return 1+max(bstheight(root->Left),bstheight(root->Right));
}
BinNodeptr* getRoot(){
return root;
}
};
int main(){
int n;
cin>>n;
int value;
char divide;
BST* mybst=new BST();
while(n--){
mybst->root=NULL;
//mybst->setRoot();
divide='\0';
while(divide!='\n'){
cin>>value;
cin.get(divide);
mybst->insert(mybst->root,new BinNodeptr(value));
}
cout<<mybst->bstheight(mybst->root)<<endl;
}
}