I have been trying to follow algorithm provided here to find k'th smallest value in the binary tree. However, I'm not clear about searching the right subtree (is this the error in my code?).
For example, for the following tree: 9, 3, 6, 5, 8, 13, 14.
9
/ \
/ \
3 13
\ \
6 14
/ \
5 8
The output I get is:
k = 0, returned 3
k = 1, returned 6 // should return 5
k = 2, returned -1 // should return 6
k = 3, returned -1 // should return 8
k = 4, returned 9
k = 5, returned -1 // should return 13
k = 6, returned -1 // should return 14
In another example - 4, 3, 2, 5, 6 - the output is also partially correct and fails to locate all nodes in the right subtree.
4
/ \
3 5
/ \
2 6
k = 0, returned 2
k = 1, returned 3
k = 2, returned 4
k = 3, returned -1 // should return 5
k = 4, returned -1 // should return 6
Can someone please explain how to locate k'th smallest value in the right subtrees?
My code:
int length(Tree t) {
if (t == NULL) {
return 0;
} else {
return 1 + length(t->left) + length(t->right);
}
}
int findSmallest(Tree t, int k) {
if (t == NULL) {
return -1;
}
if (k == length(t->left)) {
return t->value;
}
if (k < length(t->left)) {
return findSmallest(t->left, k);
}
if (k > length(t->left)) {
return findSmallest(t->right, (k - length(t->left)));
}
return 0;
}