2-3-4 Tree

2-3-4 Tree是一种查找树,由2-节点、3-节点和4-节点组成,元素排列有序。本文详细介绍了2-4 Tree的节点定义,包括DataItem类和节点类,并分析了节点分裂操作,确保树的平衡。提供了完整的代码注解,用于插入操作。
摘要由CSDN通过智能技术生成

2-3-4 Tree

简介

2-3-4 Tree又叫2-4 Tree,属于一种平衡查找树,其高度满足:<=$\log_2 x N$,关于性能问题,以后会专门出个小专题来讨论。

– 以下出自[维基百科]

  • 2-节点,就是说,他包含1个元素和2个子节点
  • 3-节点,就是说,他包含2个元素和3个子节点
  • 4-节点,就是说,他包含3个元素和4个子节点

从上面我们可以看出一个非叶子节点的子节点的个数总是比它的元素个数少一个。
2-4Tree是一棵查找树,因此它的元素的排列也是具有一定的顺序。具体可自行查阅。本文主要给出2-4Tree相关操作的主要算法。
为了行文方便,下面统一将2-3-4 Tree成为2-4 Tree。

操作算法分析

本文所用代码取自倪升武的博客,本人只是对其代码进行了一些注解和说明。在此对倪升武 表示感谢!

2-4Tree操作节点的定义代码

这里我们将节点内部的值包装进DataItem类,首先是DataItem类:

// 数据项
class DataItem
{
    public long dData;

    public DataItem(long data)
    {
        dData = data;
    }

    public void displayItem()
    {
        System.out.print("/" + dData);
    }
}

然后是2-4Tree的节点定义类:

// 节点
class Node2
{
    private static final int ORDER = 4;
    private int numItems; // 表示该节点存有多少个数据项
    private Node2 parent; //父节点
    private Node2 childArray[] = new Node2[ORDER]; // 存储子节点的数组,最多4个子节点
    private DataItem itemArray[] = new DataItem[ORDER - 1];// 该节点中存放数据项的数组,每个节点最多存放3个数据项

    // 将child节点连接到节点的childNum的位置上
    public void connectChild(int childNum, Node2 child)
    {
        childArray[childNum] = child;
        if (child != null)
        {
            child.parent = this;
        }
    }

    // 断开与子节点的连接,并返回该子节点
    public Node2 disconnectChild(int childNum)
    {
        Node2 tempNode = childArray[childNum];
        childArray[childNum] = null;
        return tempNode;
    }
    //得到childNum位置上的子节点
    public Node2 getChild(int childNum)
    {
        return childArray[childNum];
    }

    public Node2 getParent()
    {
        return parent;
    }
    //判断是否是叶子节点,依据:因为对于非叶子节点,总是满足子节点个数=父节点元素个数+1;在满足这种条件的情况下,子节点的排列总是从childArray[0]开始。
    public boolean isLeaf()
    {
        return (childArray[0] == null);
    }
    
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值