实现一个二叉搜索树迭代器。你将使用二叉搜索树的根节点初始化迭代器。
调用 next() 将返回二叉搜索树中的下一个最小的数。
注意: next() 和hasNext() 操作的时间复杂度是O(1),并使用 O(h) 内存,其中 h 是树的高度。
详见:https://leetcode.com/problems/binary-search-tree-iterator/description/
/** * 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) { while(root) { stk.push(root); root=root->left; } } /** @return whether we have a next smallest number */ bool hasNext() { return !stk.empty(); } /** @return the next smallest number */ int next() { TreeNode *node=stk.top(); stk.pop(); int res=node->val; if(node->right) { node=node->right; while(node) { stk.push(node); node=node->left; } } return res; } private: stack<TreeNode*> stk; }; /** * Your BSTIterator will be called like this: * BSTIterator i = BSTIterator(root); * while (i.hasNext()) cout << i.next(); */
参考:https://www.cnblogs.com/grandyang/p/4231455.html
原文地址:https://www.cnblogs.com/xidian2014/p/8733319.html
时间: 2024-11-05 12:33:44