C++数据结构——二叉搜索树(实现自定义迭代器)

本文详细介绍了如何在C++中为二叉搜索树实现自定义迭代器,通过`node.h`头文件和相关操作,实现对二叉搜索树的高效遍历。
摘要由CSDN通过智能技术生成
1.二叉搜索树抽象模型和相应的node对象表示
 




2.从二叉搜索树删除一个节点
   (1)如果是叶子节点就直接删除
   (2)被删除的节点有左节点,但没有右节点,则将左节点连接到父节点上,例如删除下图节点35
         
  
   (3)被删除的节点有右节点,但没有左节点,则将右节点连接到父节点上,例如删除下图节点26
       


   (4)被删除的节点有左右节点,选择该节点右子树最左边的节点来替换,此时分两组情况:
    pNodePtr:dNodePtr的父节点
    dNodeptr:将被删除的节点
    pOfRNodePtr:替代节点的父节点
    rNodePtr: 替代节点
   
   
    *右节点的左子树为空,则不需要再往左下降,例如删除下图的节点25
   


    *右节点的左子树不为空,则沿着左子树下降,直到到达叶子节点,例如删除下图的节点30
     


    实现代码:


node.h

myIterator.h
(由于篇幅的关系,详见C++数据结构——二叉搜索树迭代器的实现



BSTree.h


#ifndef BS_Tree_H
#define BS_Tree_H
#include"node.h" 
#include<iostream>
#include<queue>
using namespace std;
template<typename T>


class bs_Tree
{
friend class myIterator;
private:
node<T> *root;
//二叉搜索树根节点 


//以后序遍历方式复制二叉搜索树,返回根节点
node<T> * copyBSTree(node<T> *root)
{
node<T> *p=nullptr; //根节点
node<T> *l=nullptr; //左子树
node<T> *r=nullptr; //右子树


if(!root) //递归结束条件
{
return nullptr;
}
else
{
l=copyBSTree(root->left); //递归复制左子树
r=copyBSTree(root->right); //递归复制右子树
p=new node<T>(root->val,nullptr,l,r);


if(l)
{
l->parent=p;
}
if(r)
{
r->parent=p;
}
}


return p;
}
   
//以后序遍历方式删除二叉搜索树,
void deleteBSTree(node<T>* root)
{
if(!root) //递归结束条件
{
return;
}
else
{
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值