LeetCode #173 - Binary Search Tree Iterator - Medium

来源:互联网 发布:农村淘宝开业计划书 编辑:程序博客网 时间:2024/06/06 13:49

Problem

Implement an iterator over a binary search tree (BST). Your iterator will be initialized with the root node of a BST.Calling next() will return the next smallest number in the BST.

Note:

next() and hasNext() should run in average O(1) time and uses O(h) memory, where h is the height of the tree.

Example

Given a binary search tree below and its root    4   / \  2   5 / \1   3 with > BSTIterator i = BSTIterator(root); > while (i.hasNext()) cout << i.next();output: 1, 2, 3, 4, 5

Algorithm

整理一下题意:给定一棵二叉搜索树,定义函数next()返回二叉搜索树中下一个最小值,hasnext()函数返回这棵二叉树是否有下一个最小值。

由于二叉搜索树的特点,左子<父<右子,所以利用栈中序遍历整棵树即可。题中拆分的几个函数实际上是将中序遍历的过程拆分成三个阶段(有一个函数需要自己补全)。

代码如下。

class BSTIterator {public:    BSTIterator(TreeNode *root) {        pushLeft(root);    }    /** @return whether we have a next smallest number */    bool hasNext() {        return !st.empty();    }    /** @return the next smallest number */    int next() {        TreeNode*top=st.top();        st.pop();        pushLeft(top->right);        return top->val;    }private:    stack<TreeNode*> st;    void pushLeft(TreeNode* root){        while(root!=NULL){            st.push(root);            root=root->left;        }    }};
0 0
原创粉丝点击