题目链接:
题目描述:
天啦撸QAQ,整了半天都没懂起题目是几个意思。最后的最后,才明白大概是按中序遍历把节点非递归输出。
题目分析:
中序遍历的非递归的变形。大概方向就是用栈,将最左边的节点压入栈中。next() 就是弹出栈顶元素。
需要注意的是,被弹出的元素如果有右节点时,将右节点及右节点最左边的节点压入栈中。
代码:
class BSTIterator {
public:
stack<TreeNode*> s;
BSTIterator(TreeNode *root) {
while(!s.empty()){
s.pop();
}
while(root!=NULL){
s.push(root);
root=root->left;
}
}
/** @return whether we have a next smallest number */
bool hasNext() {
return !s.empty();
}
/** @return the next smallest number */
int next() {
TreeNode* top=s.top();
TreeNode* ptr=top;
s.pop();
if(ptr->right!=NULL){
ptr=ptr->right;
while(ptr!=NULL){
s.push(ptr);
ptr=ptr->left;
}
}
return top->val;
}
};