/*
10
7 3
4 8
9
*/
#include <bits/stdc++.h>
using namespace std;
class TreeNode
{
public :
TreeNode * left;
TreeNode * right;
int data;
TreeNode(int dataObj)
{
data = dataObj;
left = NULL;
right =NULL;
}
};
int inorderTraversal (TreeNode * node,int k)
{
TreeNode * curr = node;
int cnt=0;
int result =-1;
while(curr!=NULL)
{
if(curr->left==NULL)
{
cnt++;
if(cnt==k)
result = curr->data;
curr=curr->right;
}
else
{
TreeNode * currLeft = curr->left;
while(currLeft->right!=NULL && currLeft->right!=curr )
{
currLeft = currLeft->right;
}
if(currLeft->right==NULL)
{
currLeft->right = curr;
curr= curr->left;
}
else
{
currLeft->right = NULL;
cnt++;
if(cnt==k)
result = curr->data;
curr= curr->right;
}
}
}
return result;
}
int main() {
TreeNode * root = new TreeNode(10);
root->left = new TreeNode(4);
root->right = new TreeNode(20);
root->left->left = new TreeNode(2);
root->right->left = new TreeNode(15);
root->right->right = new TreeNode(40);
// For k = 1, result should be 2
// For k = 3, result should be 10
std::cout << "1st Smallest: " << inorderTraversal(root, 1) << std::endl;
std::cout << "3rd Smallest: " << inorderTraversal(root, 3) << std::endl;
return 0;
}
LyoKCQkxMAogICAgIDcgICAgIDMKICAgNCAgOAogICAgICAgOQoqLwojaW5jbHVkZSA8Yml0cy9zdGRjKysuaD4KdXNpbmcgbmFtZXNwYWNlIHN0ZDsKY2xhc3MgVHJlZU5vZGUKewoJcHVibGljIDoKCVRyZWVOb2RlICogbGVmdDsKCVRyZWVOb2RlICogcmlnaHQ7CglpbnQgZGF0YTsKCVRyZWVOb2RlKGludCBkYXRhT2JqKQoJewoJZGF0YSA9IAlkYXRhT2JqOwoJbGVmdCA9IE5VTEw7CglyaWdodCA9TlVMTDsKCX0KfTsKCmludCAgaW5vcmRlclRyYXZlcnNhbCAoVHJlZU5vZGUgKiBub2RlLGludCBrKQp7CglUcmVlTm9kZSAqIGN1cnIgPSBub2RlOwoJaW50IGNudD0wOwoJaW50IHJlc3VsdCA9LTE7Cgl3aGlsZShjdXJyIT1OVUxMKQoJewoJCWlmKGN1cnItPmxlZnQ9PU5VTEwpCgkJewoJCQljbnQrKzsKCQkJaWYoY250PT1rKQoJCQkJcmVzdWx0ID0gY3Vyci0+ZGF0YTsKCQkJY3Vycj1jdXJyLT5yaWdodDsKCQl9CgkJZWxzZQoJCXsKCQkJVHJlZU5vZGUgKiBjdXJyTGVmdCA9IGN1cnItPmxlZnQ7CgkJCXdoaWxlKGN1cnJMZWZ0LT5yaWdodCE9TlVMTCAmJiBjdXJyTGVmdC0+cmlnaHQhPWN1cnIgKQoJCQl7CgkJCQljdXJyTGVmdCA9IGN1cnJMZWZ0LT5yaWdodDsKCQkJfQoJCQkKCQkJaWYoY3VyckxlZnQtPnJpZ2h0PT1OVUxMKQoJCQl7CgkJCQljdXJyTGVmdC0+cmlnaHQgPSBjdXJyOwoJCQkJY3Vycj0gY3Vyci0+bGVmdDsKCQkJfQoJCQllbHNlCgkJCXsKCQkJCWN1cnJMZWZ0LT5yaWdodCA9IE5VTEw7CgkJCQljbnQrKzsKCQkJCWlmKGNudD09aykKCQkJCQlyZXN1bHQgPSBjdXJyLT5kYXRhOwoJCQkJY3Vycj0gY3Vyci0+cmlnaHQ7CgkJCQkKCQkJfQoJCQkKCQl9Cgl9CglyZXR1cm4gcmVzdWx0Owp9CmludCBtYWluKCkgewoJVHJlZU5vZGUgKiByb290ID0gbmV3IFRyZWVOb2RlKDEwKTsKICAgIHJvb3QtPmxlZnQgPSBuZXcgVHJlZU5vZGUoNCk7CiAgICByb290LT5yaWdodCA9IG5ldyBUcmVlTm9kZSgyMCk7CiAgICByb290LT5sZWZ0LT5sZWZ0ID0gbmV3IFRyZWVOb2RlKDIpOwogICAgcm9vdC0+cmlnaHQtPmxlZnQgPSBuZXcgVHJlZU5vZGUoMTUpOwogICAgcm9vdC0+cmlnaHQtPnJpZ2h0ID0gbmV3IFRyZWVOb2RlKDQwKTsKICAgIC8vIEZvciBrID0gMSwgcmVzdWx0IHNob3VsZCBiZSAyCiAgICAvLyBGb3IgayA9IDMsIHJlc3VsdCBzaG91bGQgYmUgMTAKICAgIHN0ZDo6Y291dCA8PCAiMXN0IFNtYWxsZXN0OiAiIDw8IGlub3JkZXJUcmF2ZXJzYWwocm9vdCwgMSkgPDwgc3RkOjplbmRsOyAKICAgIHN0ZDo6Y291dCA8PCAiM3JkIFNtYWxsZXN0OiAiIDw8IGlub3JkZXJUcmF2ZXJzYWwocm9vdCwgMykgPDwgc3RkOjplbmRsOyAKCiAgICByZXR1cm4gMDsKfQ==