关闭

173. Binary Search Tree Iterator

标签: c++
83人阅读 评论(0) 收藏 举报
分类:

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 {
public:
	BSTIterator(TreeNode *root) {
		TreeNode* p = root;
		while (p){
			mystack.push(p);
			p = p->left;
		}
	}

	/** @return whether we have a next smallest number */
	bool hasNext() {
		return !mystack.empty();
	}

	/** @return the next smallest number */
	int next() {
	    
		TreeNode* p = mystack.top();
		int res = p->val;
		mystack.pop();
		if (p->right){
			p = p->right;
			while (p){
				mystack.push(p);
				p = p->left;
			}
		}
		return res;
	}
private:
	stack<TreeNode*> mystack;
};

/**
 * Your BSTIterator will be called like this:
 * BSTIterator i = BSTIterator(root);
 * while (i.hasNext()) cout << i.next();
 */







0
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:38479次
    • 积分:2644
    • 等级:
    • 排名:第14281名
    • 原创:241篇
    • 转载:4篇
    • 译文:0篇
    • 评论:0条