173二叉搜索树迭代器

tech2022-10-01  104

题目描述: 实现一个二叉搜索树迭代器。你将使用二叉搜索树的根节点初始化迭代器。 调用 next() 将返回二叉搜索树中的下一个最小的数。

示例: BSTIterator iterator = new BSTIterator(root); iterator.next(); // 返回 3 iterator.next(); // 返回 7 iterator.hasNext(); // 返回 true iterator.next(); // 返回 9 iterator.hasNext(); // 返回 true iterator.next(); // 返回 15 iterator.hasNext(); // 返回 true iterator.next(); // 返回 20 iterator.hasNext(); // 返回 false

提示:

next() 和 hasNext() 操作的时间复杂度是 O(1),并使用 O(h) 内存,其中 h 是树的高度。 你可以假设 next() 调用总是有效的,也就是说,当调用 next() 时,BST 中至少存在一个下一个最小的数。

方法1: 主要思路: (1)相当于是把数的迭代中序遍历进行拆分,实现各个函数的功能;

/** * Definition for a binary tree node. * struct TreeNode { * int val; * TreeNode *left; * TreeNode *right; * TreeNode(int x) : val(x), left(NULL), right(NULL) {} * }; */ class BSTIterator { public: stack<TreeNode*>st; BSTIterator(TreeNode* root) { //初始化栈 while(root){ st.push(root); root=root->left; } } /** @return the next smallest number */ int next() { TreeNode* tmp=st.top(); TreeNode* right_tmp=tmp->right; st.pop(); //压入右子树可能的左子树结点 while(right_tmp){ st.push(right_tmp); right_tmp=right_tmp->left; } return tmp->val; } /** @return whether we have a next smallest number */ bool hasNext() { return !st.empty();//直接返回栈的大小 } }; /** * Your BSTIterator object will be instantiated and called as such: * BSTIterator* obj = new BSTIterator(root); * int param_1 = obj->next(); * bool param_2 = obj->hasNext(); */
最新回复(0)