[leetcode]173. Binary Search Tree Iterator

本文介绍了一种二叉搜索树(BST)迭代器的实现方法,该迭代器可在平均O(1)的时间复杂度内返回BST中的下一个最小值,并使用O(h)的空间复杂度,其中h为树的高度。提供了三种不同的实现方案,包括利用栈进行中序遍历的迭代器设计。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

题目链接:https://leetcode.com/problems/binary-search-tree-iterator/?tab=Description

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.



方法一:
class BSTIterator {
public:
    BSTIterator(TreeNode *root) {
        while(root)
        {
            stk.push(root);
            root=root->left;
        }
    }

    /** @return whether we have a next smallest number */
    bool hasNext() {
        if(!stk.empty())
        {
            TreeNode* top=stk.top();
            stk.pop();
            nextmin=top->val;
            TreeNode* cur=top->right;
            if(cur)
            {
                stk.push(cur);
                cur=cur->left;
                while(cur)
                {
                    stk.push(cur);
                    cur=cur->left;
                }
            }
            return true;
        }
        else
            return false;

    }

    /** @return the next smallest number */
    int next() {
        return nextmin;
    }
private:
    stack<TreeNode *> stk;
    int nextmin;

};

方法二:

class BSTIterator {  
public:  
    BSTIterator(TreeNode *root) {  
        while(root)  
        {  
            stk.push(root);  
            root=root->left;  
        }  
    }  
  
    /** @return whether we have a next smallest number */  
    bool hasNext() {  
        if(!stk.empty())  
        {  
            TreeNode* top=stk.top();  
            stk.pop();  
            nextmin=top->val;  
            TreeNode* cur=top->right;  
            while(cur)  
            {  
                stk.push(cur);  
                cur=cur->left;  
            }  
            return true;  
        }  
        else  
            return false;  
  
    }  
  
    /** @return the next smallest number */  
    int next() {  
        return nextmin;  
    }  
private:  
    stack<TreeNode *> stk;  
    int nextmin;  
  
};  

方法三:

lass BSTIterator{
public:
    BSTIterator(TreeNode *root){
        bucket=inordertraverse(root);
    }

    bool hasNext(){
        if(k<bucket.size())
            return true;
        return false;
    }

    int next(){
        return bucket[k++];
    }
private:
    vector<int> bucket;
    int k=0;
    vector<int> inordertraverse(TreeNode *root)
    {
        vector<int> res;
        stack<TreeNode*> sta;
        TreeNode *p=root;
        while(p!=NULL || !sta.empty())
        {
            while(p!=NULL)
            {
                sta.push(p);
                p=p->left;
            }
            if(!sta.empty())
            {
                TreeNode *tmp=sta.top();
                res.push_back(tmp->val);
                sta.pop();
                p=tmp->right;
            }
        }
        return res;
    }
};


内容概要:该论文聚焦于T2WI核磁共振图像超分辨率问题,提出了一种利用T1WI模态作为辅助信息的跨模态解决方案。其主要贡献包括:提出基于高频信息约束的网络框架,通过主干特征提取分支和高频结构先验建模分支结合Transformer模块和注意力机制有效重建高频细节;设计渐进式特征匹配融合框架,采用多阶段相似特征匹配算法提高匹配鲁棒性;引入模型量化技术降低推理资源需求。实验结果表明,该方法不仅提高了超分辨率性能,还保持了图像质量。 适合人群:从事医学图像处理、计算机视觉领域的研究人员和工程师,尤其是对核磁共振图像超分辨率感兴趣的学者和技术开发者。 使用场景及目标:①适用于需要提升T2WI核磁共振图像分辨率的应用场景;②目标是通过跨模态信息融合提高图像质量,解决传统单模态方法难以克服的高频细节丢失问题;③为临床诊断提供更高质量的影像资料,帮助医生更准确地识别病灶。 其他说明:论文不仅提供了详细的网络架构设计与实现代码,还深入探讨了跨模态噪声的本质、高频信息约束的实现方式以及渐进式特征匹配的具体过程。此外,作者还对模型进行了量化处理,使得该方法可以在资源受限环境下高效运行。阅读时应重点关注论文中提到的技术创新点及其背后的原理,理解如何通过跨模态信息融合提升图像重建效果。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值