题目: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
2-3树的建树(即插入)过程
最新推荐文章于 2024-06-07 15:16:07 发布