力扣 173. 二叉搜索树迭代器 中序遍历非递归
发布日期:2021-11-05 06:59:22 浏览次数:13 分类:技术文章

本文共 1112 字,大约阅读时间需要 3 分钟。

在这里插入图片描述
思路:对二叉搜索树进行中序遍历就可得到一个从小到大的有序序列。那么最简单的做法就是用一个数组存储中序遍历的结果。但是这个空间复杂度是 O ( n ) O(n) O(n)的,怎么做到 O ( h ) O(h) O(h)呢?使用非递归中序遍历即可。在非递归做法中,栈存储的是从根到某个节点的路径,所以空间复杂度最多为 O ( h ) O(h) O(h)。关于如何用栈实现中序遍历,可以看我这一篇。

/** * 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: BSTIterator(TreeNode* root) {
cur=root; } /** @return the next smallest number */ int next() {
while(cur){
s.push(cur); cur=cur->left; } cur=s.top(); s.pop(); int val=cur->val; cur=cur->right; return val; } /** @return whether we have a next smallest number */ bool hasNext() {
if(cur||!s.empty()) return 1; return 0; }private: stack
s; TreeNode *cur;};/** * 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(); */

转载地址:https://blog.csdn.net/xiji333/article/details/107942494 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!

上一篇:力扣 1381. 设计一个支持增量操作的栈 数组模拟栈
下一篇:力扣 剑指 Offer 09. 用两个栈实现队列 模拟

发表评论

最新留言

路过,博主的博客真漂亮。。
[***.116.15.85]2024年05月02日 00时51分13秒

关于作者

    喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!

推荐文章