fork download
  1. /*
  2. 10
  3.   7 3
  4.   4 8
  5.   9
  6. */
  7. #include <bits/stdc++.h>
  8. using namespace std;
  9. class TreeNode
  10. {
  11. public :
  12. TreeNode * left;
  13. TreeNode * right;
  14. int data;
  15. TreeNode(int dataObj)
  16. {
  17. data = dataObj;
  18. left = NULL;
  19. right =NULL;
  20. }
  21. };
  22.  
  23. int inorderTraversal (TreeNode * node,int k)
  24. {
  25. TreeNode * curr = node;
  26. int cnt=0;
  27. int result =-1;
  28. while(curr!=NULL)
  29. {
  30. if(curr->left==NULL)
  31. {
  32. cnt++;
  33. if(cnt==k)
  34. result = curr->data;
  35. curr=curr->right;
  36. }
  37. else
  38. {
  39. TreeNode * currLeft = curr->left;
  40. while(currLeft->right!=NULL && currLeft->right!=curr )
  41. {
  42. currLeft = currLeft->right;
  43. }
  44.  
  45. if(currLeft->right==NULL)
  46. {
  47. currLeft->right = curr;
  48. curr= curr->left;
  49. }
  50. else
  51. {
  52. currLeft->right = NULL;
  53. cnt++;
  54. if(cnt==k)
  55. result = curr->data;
  56. curr= curr->right;
  57.  
  58. }
  59.  
  60. }
  61. }
  62. return result;
  63. }
  64. int main() {
  65. TreeNode * root = new TreeNode(10);
  66. root->left = new TreeNode(4);
  67. root->right = new TreeNode(20);
  68. root->left->left = new TreeNode(2);
  69. root->right->left = new TreeNode(15);
  70. root->right->right = new TreeNode(40);
  71. // For k = 1, result should be 2
  72. // For k = 3, result should be 10
  73. std::cout << "1st Smallest: " << inorderTraversal(root, 1) << std::endl;
  74. std::cout << "3rd Smallest: " << inorderTraversal(root, 3) << std::endl;
  75.  
  76. return 0;
  77. }
Success #stdin #stdout 0s 5316KB
stdin
Standard input is empty
stdout
1st Smallest: 2
3rd Smallest: 10