#include <iostream>
#include <stdlib.h>
#include <vector>
class BST
{
public:
BST() : ptr(NULL){}
void insert(int data)
{
ptr = insert(ptr, data);
}
int getRank(int data)
{
return getRank(ptr, data);
}
private:
struct Node
{
int data;
int leftsize;
int rightsize;
Node* left;
Node* right;
Node(int val) : data(val), leftsize(0), rightsize(0), left(NULL), right(NULL){}
};
int getRank(Node* root, int data)
{
if(root==NULL)
return 0;
else if(data == root->data)
return root->leftsize;
else if(data < root->data)
{
if(root->left==NULL)
return -1;
int val = getRank(root->left, data);
return val==-1? -1 : val;
}
else //if(data > root->data)
{
if(root->right==NULL)
return -1;
int val = getRank(root->right, data);
return val==-1 ? -1 : (root->leftsize + 1 + val );
}
}
Node* insert(Node* root, int data)
{
if(!root)
return new Node(data);
if(data<=root->data)
{
root->left = insert(root->left, data);
root->leftsize ;
}
else
{
root->right = insert(root->right, data);
root->rightsize ;
}
return root;
}
Node* ptr;
};
int main()
{
BST bst;
std::vector<int> stat(10,0);
for(int i=0; i<20; i )
{
int data = rand()%10;
bst.insert(data);
stat[data]++;
}
int result;
bool test;
for(int i=0; i<10; i )
{
result = bst.getRank(i);
}
return 0;
}
Tuesday, January 14, 2014
[Cracking The Coding Interview] Chapter 11.08
Subscribe to:
Post Comments (Atom)
No comments:
Post a Comment