问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

急!急!求二叉排序树程序

发布网友 发布时间:2022-08-29 19:44

我来回答

1个回答

热心网友 时间:2024-10-21 19:37

#include <iostream.h>
//二叉排序树类的前视定义
template<class Type> class BSTree;
//二叉排序树结点类的定义
template<class Type>
class BSTreeNode
{friend class BSTree <Type>;
private:
Type data; //数据域(在此为关键字)
BSTreeNode <Type> *leftChild, *rightChild;
public:
BSTreeNode():leftChild(NULL),rightChild (NULL){};//构造函数
BSTreeNode(const Type &d) : data (d), leftChild (NULL),rightChild (NULL) {} ; //构造函数
~BSTreeNode(){}; //析构函数
};

//二叉排序树的类定义
template <class Type>
class BSTree
{
private:
BSTreeNode<Type> * root; //二叉排序树的根指针

void Insert ( const Type & x, BSTreeNode<Type> *&p );
//在p为根的二叉排序树上插入数据元素x
void Delete ( const Type & k, BSTreeNode<Type> *&p );

//在p为根的二叉排序树上删除关键字为k的结点
BSTreeNode<Type> * Min(BSTreeNode<Type> *p);
BSTreeNode<Type> * Find(const Type &k, BSTreeNode<Type> *p );
//在p为根的二叉排序树上查找关键字为k的结点
void InOrder(BSTreeNode<Type> *r);
public:
BSTree() : root (NULL) {}//构造函数
Type Find ( const Type &k ) {//查找
BSTreeNode<Type>* p=Find ( k, root );
if(p==NULL){
cout<<"There is not a node that equals "<<k<<endl;
return NULL;
}
return p->data;
}
void Insert(const Type &x) { Insert ( x, root ); } //插入
void Delete(const Type &k) { Delete ( k, root ); } //删除
void SortDisplay(){InOrder(root);cout<<endl;}

};

template <class Type>
void BSTree<Type>::
Insert(const Type &x, BSTreeNode<Type> * &p) {
//在p为根的二叉排序树插入结点的递归算法
if ( p == NULL ) //空二叉树
p = new BSTreeNode<Type>(x); //创建数据元素x的结点
else if (x<p->data )
//在左子树插入
Insert ( x, p->leftChild );
else if ( x > p->data )
//在右子树插入
Insert ( x, p->rightChild );
else //结点x已存在
{
cout << "There has node x" << endl;
}
}
template <class Type>
BSTreeNode<Type> * BSTree<Type> ::
Find (const Type &k, BSTreeNode<Type> *p) {
//在p为根的二叉排序树上进行查找的递归算法
if ( p == NULL ) return NULL; //查找失败
else if ( k<p->data )
//在左子树上递归查找
return Find (k,p->leftChild );
else if (k>p->data )
//在右子树上递归查找
return Find ( k, p->rightChild );
else return p; //相等,查找成功
}
template <class Type>
void BSTree<Type> ::
Delete(const Type &k, BSTreeNode<Type> * &p){
//在p为根的二叉排序树上删除关键字为k的结点

if ( p != NULL ){
BSTreeNode<Type> * temp;
if ( k < p->data )
Delete ( k, p->leftChild );
else if ( k > p->data )
Delete ( k, p->rightChild );
else if ( p->leftChild != NULL && p->rightChild != NULL ){
BSTreeNode<Type> * tparent=p;
temp=p->rightChild;
while(temp->leftChild!=NULL){
tparent=temp;
temp=temp->leftChild;
}
p->data = temp->data;
if(tparent==p)
Delete ( p->data,tparent->rightChild );
else Delete ( p->data,tparent->leftChild );
}
else {
temp = p;
if ( p->leftChild == NULL )
p = p->rightChild;
else if ( p->rightChild == NULL )
p = p->leftChild;
delete temp;
}
}
}
template <class Type>
void BSTree<Type>::InOrder(BSTreeNode<Type>* r){
if(r!=NULL){
InOrder(r->leftChild);
cout<<r->data<<" ";
InOrder(r->rightChild);
}
}
void main (){

BSTree<int> a;
int x;
cout<<"输入序列:"<<" ";
for(int i=0;;i++){
cin>>x;
if(x==-1)break;
a.Insert(x);
}
cout<<endl;
cout<<"输出中序遍历序列应为:";
a.SortDisplay();
cout<<endl;
cout<<"输入需要删除的整数:"<<" ";
int y;
cin>>y;
cout<<endl;
cout<<"查找结果是:"<<a.Find(y)<<endl;
cout<<endl;
a.Delete(y);
cout<<"输出删除后的中序遍历序列应为:"<<" ";
a.SortDisplay();

}
二叉排序树查找的二叉排序树查找的程序实现:

5. 二叉排序树的删除:假设被删结点是*p,其双亲是*f,不失一般性,设*p是*f的左孩子,下面分三种情况讨论:⑴ 若结点*p是叶子结点,则只需修改其双亲结点*f的指针即可。⑵ 若结点*p只有左子树PL或者只有右子树PR,则只要使PL或PR 成为其双亲结点的左子树即可。⑶ 若结点*p的左、右子树均非空,...

将整数序列{4,5,7,2,1,3,6}中的数依此插入到一棵空的二叉排序树中...

将整数序列{4,5,7,2,1,3,6}中的数依次插入到一棵空的二叉排序树中,相应的二叉排序树是:平均查找长度=1*1+2*2+3*3+4*3=26 (第一层一个结点,每个结点比较一次查找成功;第二层两个结点,每个结点比较两次查找成功;第三层三个结点,每个结点比较三次查找成功;第四层三个结点,每个结点...

设计一个读入一串整数构成一棵二叉排序树的算法

1、若根结点的左子树非空,则左子树上所有结点的关键字值均小于等于根结点的关键字值。2、若根结点的右子树非空,则右子树上所有结点的关键字值均大于等于根结点的关键字值。3、根结点的左、右子树也分别为二叉排序树。二叉排序树建立说明:当需要插入一个节点到二叉排序树时,需要先找到它的父节点。

假设一棵二叉树的按层次遍历序列为abcdefghij,中序遍历序列为dbgehjac...

(3)左、右子树也分别为二叉排序树;

二叉排序树的应用

二叉排序树(Binary Sort Tree),首先它是一棵树,“二叉”这个描述已经很明显了,就是树上的一根树枝开两个叉,于是递归下来就是二叉树了(下图所示),而这棵树上的节点是已经排好序的,具体的排序规则如下:若左子树不空,则左子树上所有节点的值均小于它的根节点的值 若右子树不空,则右字数上...

用VB编写 二叉树的建立与遍历、二叉树的排序

将原程序和实验结果存入计算机室服务器或软盘后,交由指导老师或有关实验人员保存。实验五 二叉树的排序 一、实验名称 二叉树的排序。二、实验目的 通过该实验,进一步熟悉二叉树的建立方法,掌握二叉排序树的建立和使用。三、实验内容 (1)根据中序遍历,建立一棵二叉排序树用二叉链表存储;(2)给出...

帮我看看这个程序,按照所生成的随机样本顺序生成对应二叉排序树...

void Insert (BinTree *T,BinTree *s){ BinTree *f,*p=T;while (p){ f=p;if(s-&gt;keykey)p=p-&gt;llink;else p=p-&gt;rlink;};if(T==NULL)T=s;//这里,函数参数都是传值的,所以这里的赋值,影响不到CreateTree函数里的T值。else if(s-&gt;key&lt;f-&gt;key)f-&gt;llink=s;else f-&gt;rli...

编写程序,用先序递归遍历法建立二叉树的二叉链表存储结构,输出其先序...

BiTNode *bulid() /*建树*/ { BiTNode *q;BiTNode *s[20];int i,j;char x;printf("请按顺序输入二叉树的结点以输入0和*号结束\n");printf("请输入要输入的为第几个结点i=\n");scanf("%d",&amp;i);printf("请输入你要输入该结点的数为x=");getchar();scanf("%c",&amp;x);while(i!=...

利用二叉排序树,统计随机从键盘上输入的字符个数,然后输出字符和对应...

1、统计字符串中字符出现的次数 编写一个程序,由键盘输入一个字符串,统计该字符串中出现的字符及其次数。然后输出结果。要求用一个二叉树来保存处理结果,字符串中每个不同的字符用树的结点表示,结点应该包含四个域:该字符、该字符出现的次数、左子树指针、右子树指针;其中左子树的字符的ASCII码均...

...15},假定每个结点的查找概率相同,若按二叉排序树组织该

回答:总查找次数N=1+2+3+…+n=n(n+1)/2,则平均查找长度为N/n=(n+1)/2。 依次插入数列中的数字得到二叉排序树,最后树的深度为7,根据每个结点所在行数加起来除以结点个数

二叉查找树和二叉排序树 二叉排序树和平衡二叉树 怎么根据后序遍历求二叉排序树 求二叉排序树 二叉排序树的深度怎么求 二叉排序树高度怎么求 二叉排序树asl怎么求 给一组数求二叉排序树 先序遍历求二叉树高度
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
...现在说的最多一句话就是不想解释了让我相信他 我问他什么的说不想... 猫妈妈买回的是什么? 公务员考试中要求的“2009年应届毕业生”怎么界定? 165身高女生标准体重 投诉家里养了很臭的鸡鸭怕 No.93 希望皇霍普·真皇的卡片信息 邻居在我家边上养了好多鸡,夏天气味很臭,严重影响我的生活 手上总起小水泡怎么回事 ...问我,你为什么选择我们公司??你有什么优势可以让我们录用你?_百度... 艾滋病患者舌头发白怎么回事 请问怎么用结点来计算二叉排序树的个数? 比如给四个结点abcd,应该怎么... 求二叉树排序树的实现 天官生日是几月几? 新买的电脑,360浏览器部分图片不显示了,部分网站的视频只有全屏才显示... 月饼盒的材质是什么 烟台大学的食品质量与安全专业怎么样? 怎么防止别人盗我的 苏联解体的历史评价 为什么实名认证的时候身份证证件老是显示证件审核失败? ...身份证,但是注销了,清除实名认证提示审核身份失效,要怎么办清除的... 什么运动可以瘦腿和屁股 什么运动能瘦腿和屁股 八月十五中秋节月饼的由来 春昼短1和2有关系吗 寿比南山用于多少岁 金融科技对商业银行有何影响?用学术理论解释,该如何理解? 辅助怎么在其他手机登陆 知道和密码怎么在另外一个手机登录微信? 怎样在另一个手机上登录同一个? 灰黑色天珠的水线和纹理的区别 PS调饱和度有什么用 最好的月饼来自哪里 超市买的干肉皮怎么泡 怎么泡超市买的干肉皮 用登录一款麻将软件显示的是不存在该用户 螳螂吃蟑螂吗 谁创造的月饼 81年生肖属鸡42岁桃花运 2023年会不会离婚 新月有什么寓意 新月有什么含义 用同一个手机号重新注册了一个,之前的微信怎么登录? 炖猪皮的做法,炖猪皮怎么做好吃,炖猪皮的家常做法 蟑螂为什么叫蟑螂? 女儿被盗了,怎么友情发个朋友圈- 问一问 怎么在朋友圈声明被盗 怎么在朋友圈声明被盗 被盗了怎么办 被盗,重新注册了个怎么发朋友圈告诉朋友 为什么小蟑螂难以根除啊!!! 五仁月饼是不是中华美食 崩坏3远古意志 那个地图更多? 崩坏3远古意志三件套怎么样