leetcode[173]Binary Search Tree Iterator

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.

/**

 * Definition for binary tree

 * struct TreeNode {

 *     int val;

 *     TreeNode *left;

 *     TreeNode *right;

 *     TreeNode(int x) : val(x), left(NULL), right(NULL) {}

 * };

 */

class BSTIterator {

private:

    stack<TreeNode *> sta;

public:

void leftOrder(TreeNode *root)

{

    if(root==NULL)return;

    TreeNode *tmp=root;

    while(tmp)

    {

        sta.push(tmp);

        if(tmp->left)

        {

            tmp=tmp->left;

        }

        else break;

    }

    return;

}

    BSTIterator(TreeNode *root) {

      leftOrder(root); 

    }



    /** @return whether we have a next smallest number */

    bool hasNext() {

       return !sta.empty(); 

    }



    /** @return the next smallest number */

    int next() {

        TreeNode *top=sta.top();

        sta.pop();

        if(top->right)leftOrder(top->right);

        return top->val;

    }

};



/**

 * Your BSTIterator will be called like this:

 * BSTIterator i = BSTIterator(root);

 * while (i.hasNext()) cout << i.next();

 */

 

你可能感兴趣的:(Binary search)