BST Iterator Time : O(n) Space : O(h) 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152/** * Definition for binary tree * struct TreeNode { * int val; * TreeNode *left; * TreeNode *right; * TreeNode(int x) : val(x), left(NULL), right(NULL) {} * }; */ vector<TreeNode*> st;BSTIterator::BSTIterator(TreeNode *root) { st.clear(); while(root != NULL) { st.push_back(root); TreeNode* left = root->left; root->left = NULL; root = left; }}/** @return whether we have a next smallest number */bool BSTIterator::hasNext() { return !st.empty();}/** @return the next smallest number */int BSTIterator::next() { int res = st.back()->val; TreeNode* back = st.back(); st.pop_back(); if(back->right != NULL) { st.push_back(back->right); } if(!st.empty()) { back = st.back(); while(back->left != NULL) { st.push_back(back->left); back->left = NULL; back = st.back(); } } return res;}/** * Your BSTIterator will be called like this: * BSTIterator i = BSTIterator(root); * while (i.hasNext()) cout << i.next(); */