Yahoo Interview Question Software Engineer / Developers
0of 0 votesWrite a function that returns a node in a tree given two parameters: pointer to the root node and
the inorder traversal number of the node we want to return. The only information stored in the tree is
the number of children for each node
There is really no point for recursion here. I think that using recursion at these places is actually not a good practice. Though on a similar lines using iteration, this code looks more efficient to me:
Nodeptr nthInInorder(Nodeptr root, int x){
Nodeptr curr = root;
int countedIn = 0, leftchildren = 0, currIn=0;
while(curr!=NULL){
if(curr->left == NULL)
leftchildren = 0;
else
leftchildren = (curr->left)->data + 1;
currIn = countedIn + leftchildren + 1;
if(currIn == x)
return curr;
else if(currIn > x)
curr = curr->left;
else if(currIn < x)
{ countedIn = currIn + 1;
curr = curr->right;
}
}
return NULL;
}

Node * KthSmallest(Node *n, int k) { int leftCount; if (n->pLeft == NULL) leftCount = 0; else leftCount = n->pLeft->count; if (leftCount + 1 == k) return n; if (leftCount + 1 < k) return KthSmallest(n->pRight, k - 1 - leftCount); return KthSmallest(n->pLeft, k); }In main() call
- czpete on October 11, 2010 Edit | Flag Reply