C++数据结构——二叉搜索树迭代器的实现

本文详细探讨了如何在C++中为二叉搜索树实现自定义迭代器,通过迭代器可以方便地遍历和操作树中的元素,增强了数据结构的使用体验。
摘要由CSDN通过智能技术生成
1.二叉搜索树迭代器的中序遍历
 






2.迭代器的++指向中序遍历的下一个节点
  *如果右子树不空,则移动到右子树,并沿着左边向下,直到当前节点的左指针为空,例如12的下一节点14
  *如果右子树为空,则沿着父指针链向上查找,直到找到以当前节点作为左子结点的父节点,例如23的下一节点25
   特殊情况:
           (1)沿着父指针链向上查找,最终父节点为空,说明迭代器指向的是最后一个节点,直接返回end()
           (2)迭代器本身是end().
    




3.迭代器的--与++类似
  *如果左子树不空,则移动到左子树,并沿着右边向下,直到当前节点的右指针为空,例如25的前驱23
  *如果左子树为空,则沿着父指针链向上查找,直到找到一当前节点作为右节点的父节点,例如14的前驱节点12
    特殊情况:
           (1)沿着父指针链向上查找,最终父节点为空,说明迭代器指向的是第一个节点,直接返回end()
           (2)迭代器本身是begin(),此时返回最后一个节点
    
实现代码:

node.h
#ifndef node_H
#define node_H
template<typename T>
class node
{
public:
node<T> *parent;
//父节点指针
node<T> *left;  //左节点指针
node<T> *right; //右节点指针
T val; //节点值 

node():parent(nullptr),left(nullptr),right(nullptr){}
node(T v, node<T> *p=nullptr, node<T> *l=nullptr, node<T> *r=nullptr):val(v),parent(p),left(l),right(r){}

};




#endif



myIterator.h


#ifndef myIterator_H
#define  myIterator_H
#include"node.h"


class myIterator
{
    friend class bs_Tree<T>;
private:
node<T> *curr;
//迭代器指向的当前指针
bs_Tree<T> *obj;  //迭代器所在的对象
myIterator(node<T> *c, bs_Tree<T> *o):curr(c),obj(o){}

//查找按中序遍历时的第一个节点 
node<T>* findLeftFirst(node<T>* root)
{
node<T> *temp=root;
while(temp->left)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值