Item selectR (link currentTree, int k) {
  if (currentTree == emptyTree) {
    return NULLitem;
  }
  if (currentTree->left->size == k) {
    return (currentTree->item);
  }
  
  if (currentTree->left->size > k) {
    return (selectR (currentTree->left, k));
  }

  return (selectR (currentTree->right, k - 1 - currentTree->left->size));
}
Exemple #2
0
// Treat tree as flattened into an ordered array
//k = rank needed to be found
Item STselect(int k)
{
if (k<0 || k>=sizeOfTree)//if key is negitave or if the key is bigger than the Heads Subtree size report error
{
  return NULLitem; //return null since there is no item that has that rank
}
return selectR(head, k);
}
Exemple #3
0
//h=node being investigated, k= key needing to be found
Item selectR(link h, int k)
// See Sedgewick - implements "zero-based indexing".
// Returns the kth smallest key where k=0 returns the smallest
// key.  Thus, this is like flattening the tree inorder into an array
// and applying k as a subscript.
{ 
int t = h->rank; 

if (h == z)
{
  printf("Impossible situation in selectR\n");
  STprintTree();
  exit(0);
}
if (t > k){
  return selectR(h->l, k);
}
if (t < k){
  return selectR(h->r, k-t-1);
}
return h->item;
}
Exemple #4
0
Item STselect(link head, int r) {
    return selectR(head, r);
}
Exemple #5
0
Item selectR(link h, int r) {
    int t = hl->N;
    if (t > r) return selectR(hl, r);
    if (t < r) return selectR(hr, r-t-1);
    return *(h->item);
}
Item STselect (int k) {
  return (selectR (rootNodeLink, k));
}