2-3树的建树(即插入)过程

题目:2-3树的建树(即插入)过程
问题描述:
 实现2—3树的插入过程。
 2—树是这样一种树:
  A.每个非叶子结点都有2个或3个儿子;
  B.每条众树根到树叶的路径长度相等;
  C.只有一个根结点的树也是2—3树。
算法设计思想:(冒泡法等方法)
 构建这样的结点:p指向父结点;lb指向左子树最大结点;mb指向第二个子树最大结点;ls指向最左孩子结点;ms指向中间孩子结点;rs指向最右孩子结点;ap附加孩子结点。
 向2—3树T插入新的结点:
如果T只有一个叶子结点 标记为 ,则创建一个新的根结点 ,创建一个新的叶子结点 标记为 ,使 和 成为 的孩子,使 和 中较大的成为左孩子,另一个为中间孩子;
如果T有多于一个的结点,则令 ( 为 中所有孩子都是叶子结点的结点),创建一个新的叶子结点 标记为 ,如果 只有两个标记为 和 的孩子,那么令 ,调整 、 和 为正确的顺序;如果 有三个孩子,则令 ,再调用 合并 及其四个孩子到树T中,并调整合并后的树T根结点到 结点的路径上结点顺序。
源代码:
#include <iostream.h>
#define Create(v,x) v=new TreeNode;v->data=x;v->p=NULL;v->lb=NULL;v->mb=NULL;v->ls=NULL;v->ms=NULL;v->rs=NULL;v->ap=NULL;
//define后的字符列表只能在同一行
#define Delete(v) delete(v);
typedef struct TreeNode
{
 int data;     //数据项
 struct TreeNode *p;   //指向父结点的指针
 struct TreeNode *lb;  //指向左子树最大结点的指针
 struct TreeNode *mb;  //指向第二个子树最大结点的指针
 struct TreeNode *ls;  //指向最左孩子结点的指针
 struct TreeNode *ms;  //指向中间孩子结点的指针
 struct TreeNode *rs;  //指向最右孩子结点的指针
 struct TreeNode *ap;  //附加孩子结点
}TreeNode;
TreeNode* Buil

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值