Given a binary search tree and an integer K, find K-th smallest element in BST.
For example:
Input:
2
/ \
1 3
K = 2
Output:
2
Note: Your solution musb be in-place without altering the nodes' values.
Solution 1:
in-order递归访问。
TreeNode* kth_smallest(TreeNode* root, int& k) { if(!root || k < 0 ) return nullptr; TreeNode* left = kth_smallest(root->left, k); if(left) return left; if(--k == 0) return root; return kth_smallest(root->right, k); }
Solution 2:
in-order非递归访问。
TreeNode* kth_smallest(TreeNode* root, int& k) { if(!root || k <= 0 ) return nullptr; TreeNode* node = root; stack<TreeNode *> st; while(!st.empty() || node) { if(node) { st.push(node); node = node->left; } else { TreeNode *p = st.top(); st.pop(); if(--k == 0) return p; if(p->right) node=p->right; } } return nullptr; }