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
    评论
二叉排序(Binary Sort Tree)又称二叉查找(Binary Search Tree),它或者是一棵空树,或者是具有下列性质的二叉: - 若它的左子不为空,则左子上所有结点的值均小于它的根结点的值;- 若它的右子不为空,则右子上所有结点的值均大于它的根结点的值; - 它的左右子也分别为二叉排序。 下面是用C++实现二叉排序建树的代码: ```c++ #include <iostream> using namespace std; struct TreeNode { int val; TreeNode* left; TreeNode* right; TreeNode(int x) : val(x), left(NULL), right(NULL) {} }; class BinarySearchTree { public: BinarySearchTree() : root(NULL) {} void insert(int val) { root = insert(root, val); } private: TreeNode* root; TreeNode* insert(TreeNode* node, int val) { if (node == NULL) { return new TreeNode(val); } if (val < node->val) { node->left = insert(node->left, val); } else if (val > node->val) { node->right = insert(node->right, val); } return node; } }; int main() { BinarySearchTree bst; bst.insert(5); bst.insert(3); bst.insert(7); bst.insert(2); bst.insert(4); bst.insert(6); bst.insert(8); return 0; } ``` 在这段代码中,我们定义了一个 `TreeNode` 结构体来表示二叉排序的节点,其中 `val` 表示节点的值,`left` 和 `right` 分别表示左右子节点。然后我们定义了一个 `BinarySearchTree` 类来实现二叉排序,其中 `insert` 方法用于向二叉排序树中插入新的节点。最后在 `main` 函数中我们创建了一个二叉排序对象 `bst`,并向其中插入了一些节点。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值