题目链接:https://leetcode-cn.com/problems/binary-search-tree-iterator/
1、排序
将树元素保存到数组中,再对其排序。
class BSTIterator {
public:
vector<int> v;
int pos;
BSTIterator(TreeNode* root) {
v=sort(root);
pos=0;
}
/** @return the next smallest number */
int next() {
return v[pos++];
}
/** @return whether we have a next smallest number */
bool hasNext() {
if(pos==v.size()){
return false;
}else{
return true;
}
}
vector<int> sort(TreeNode* root){
vector<int> v;
traversal(root,v);
std::sort(v.begin(),v.end());
return v;
}
int traversal(TreeNode* p,vector<int> &v){
if(!p){
return 0;
}
v.push_back(p->val);
traversal(p->left,v);
traversal(p->right,v);
return 0;
}
};
2、中序遍历
因为是二叉搜索树,可以用中序遍历,栈实现
class BSTIterator {
public:
stack<TreeNode*> s;
BSTIterator(TreeNode* root) {
TreeNode* p=root;
while(p){
s.push(p);
p=p->left;
}
}
/** @return the next smallest number */
int next() {
TreeNode* p=s.top();
s.pop();
TreeNode *tmp=p->right;
while(tmp){
s.push(tmp);
tmp=tmp->left;
}
return p->val;
}
/** @return whether we have a next smallest number */
bool hasNext() {
if(!s.empty()){
return true;
}else{
return false;
}
}
};