A class that implements the Set interface using a binary search tree

Java实现:二叉搜索树(Binary Search Tree) 目录 一、二叉搜索树 二、完整代码实现(Java) 1、二叉搜索树 1.1、 基本概念 二叉树的一个性质是一棵平均二叉树的深度要比节点个数N小得多。分析表明其平均深度为 O(√N)O(N) ,而对于特殊类型的二叉树,即二叉查找树(binary search tree),其深度的平均值为 O(logN)O(logN) 。 二叉查找树的性质:对于树中的每个节点X,它的左子树中所有项的值小于X中的项,而它的右子树中所有项的值大于X中的项。 由于树的递归定义,通常是递归地编写那些操作的例程。因为二叉查找 阅读详情

The major hurdle is that our class does not implement Iterable. To overcome this, we augment the BinaryNode inner class by adding links to the next smallest and next largest nodes so that the iterator can efficiently return the next node (just like a linked list). Rewrite the insert method of MyBinarySearchTree to support the added links.

We first augment the data structure so that the inner class becomes:

    private static class BinaryNode
    
{
         ...
        AnyType element;              
// The data in the node
        BinaryNode<AnyType> left;     // Left child
        BinaryNode<AnyType> right;    // Right child
        BinaryNode<AnyType> smaller;  // Previous in-order element
        BinaryNode<AnyType> larger;   // Next in-order element
    }

 

Here is the insert method:

private BinaryNode<T> insert(T x, BinaryNode<T> t, BinaryNode<T> larger, BinaryNode<T> smaller)
{
    
if (t == null)
    
{
        BinaryNode
<T> n = new BinaryNode<T>(x, nullnull, larger, smaller);
        
if (larger != null) larger.prev = n;
        
if (smaller != null) smaller.next = n;
        
return n;
    }

    
int compareResult = x.compareTo(t.element);
    
if (compareResult < 0)
        t.left 
= insert(x, t.left, t, smaller);
    
else if (compareResult > 0)
        t.right 
= insert(x, t.right, larger, t);
    
else
        ; 
// duplicate

    
return t;
}


When a new node is inserted as a left child, three things must be done to support this augmentation: its larger field must point to its parent; its smaller field must be set to its parent's smaller field; and the parent's smaller field must be set to it. A similar triplet of changes is needed when the new node is a right child.
Java集合框架、并发修改异常、Lamabda表达式 javaList/map面试题 阅读详情

相关推荐

oracle11隐藏参数调整

oracle11隐藏参数调整

二叉搜索树(Binary Search Tree)(Java实现)

1、二叉搜索树 1.1、 基本vb.net教程概念 二叉树的一个性质是一棵平均二叉树的深度c#教程要比节点个数N小得多。分析表明其平均深度为O(N−−√)O(N),而对于特殊类型的二叉树,即二叉查找树(binary search tree),其深度的平均值为O(logN)O(logN)。 二叉查找树的性质:对于树中的每个节点X,它的左子树中所有项的值小于X中的项,而它的右子树中所有项的值大于X中的项。 由于树的递归定义,通常是递归python基础教程地编写那些操作的例程。因为二叉查找树的平均..

chinaherolts2008的博客 349

CAD+说明书履带拖拉机变速器改进设计Ⅳ

CAD+说明书履带拖拉机变速器改进设计 Ⅳ

NCCL 分布式并行计算通讯库技术

NCCL(NVIDIA Collective Communication Library)集合通讯库,是 NVIDIA 为 AI 模型开发者提供的、专用于控制多张 GPU 之间进行高效通信的 lib 库,应用于分布式 GPU 训练场景。如下深度学习软件堆栈图所示。NCCL 的北向是 AI 模型开发框架 PyTorch、Paddle、TensorFlow 等,这些 AI 框架通过集成、调用 NCCL lib 库来控制 GPU 之间的数据通信方式。

烟云的计算 4689

科技中介如何高效匹配技术供需?.docx

科技中介如何高效匹配技术供需?

!qhyb.rar

当 CAD 缺失对应字体时,图纸文字会显示异常,出现乱码、问号。将下载好的字体文件复制到 AutoCAD 的 Fonts 文件夹中,即可恢复正常显示。

政府科技管理部门如何实现科技成果高效转化?.docx

政府科技管理部门如何实现科技成果高效转化?

国有企业如何推动科技创新与产业升级融合?.docx

科易网基于40亿+科创知识图谱数据库,深度探索AI技术在技术转移、成果转化、技术经纪、知识产权、产业创新、科技招商等垂直领域的多样化应用场景,研究科技创新领域的AI+数智化解决方案,推动科技创新与产业创新智能化发展。

科技中介服务如何实现数字化升级?.docx

科易网基于40亿+科创知识图谱数据库,深度探索AI技术在技术转移、成果转化、技术经纪、知识产权、产业创新、科技招商等垂直领域的多样化应用场景,研究科技创新领域的AI+数智化解决方案,推动科技创新与产业创新智能化发展。

librdkafka Windows 包(可直接使用)

librdkafka/win ├─ bin/ # 全部运行时dll + pdb调试符号 + plugins插件目录 ├─ include/ # 头文件 rdkafka.h └─ lib/ # .lib静态导入库(链接阶段使用)

兄弟MFC-J2330DW 中文维修手册

兄弟MFC-J2330DW 中文维修手册

CesiumForUnitySamples-v1.25.1

Cesium for Unity 是一个官方插件,它将 Cesium 强大的3D 地理空间平台能力深度集成到了 Unity 引擎中。简单来说,它让你能在 Unity 里创建出一个高精度的真实地球,并加载和探索全球范围内的海量地理数据

政府科技管理部门如何降低平台建设成本?.docx

科易网基于40亿+科创知识图谱数据库,深度探索AI技术在技术转移、成果转化、技术经纪、知识产权、产业创新、科技招商等垂直领域的多样化应用场景,研究科技创新领域的AI+数智化解决方案,推动科技创新与产业创新智能化发展。

sam l part3 niubi666

sam l part3 niubi666

内窥镜摄像系统,全球前10强生产商排名及市场份额.docx

内窥镜摄像系统,全球前10强生产商排名及市场份额

RIS 智能超表面:6G 的"可编程无线电环境"如何靠 N² 定律改写覆盖规则

`RIS` `智能超表面` `6G` `可编程无线电环境` `波束成形` `N²定律` `相位优化` `Sionna` `毫米波` `通信仿真`

上一篇: 转:中美计算机教育与软件工程
下一篇: 李开复:21世纪7种人才最抢手
qt_pixie
博客等级 码龄20年 1粉丝 2原创
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值