已知一个长为12的线性表(dec,feb,nov,oct,jul,sept,aug.apr,may,jun,jan,mar).(1)若每个元素的查找概率相等,则构造二叉排序树后查找不成功的平均查找长度是多少?(2)若对元素按照字典顺序从小到大
来源:学生作业帮助网 编辑:六六作业网 时间:2024/11/27 15:09:46
已知一个长为12的线性表(dec,feb,nov,oct,jul,sept,aug.apr,may,jun,jan,mar).(1)若每个元素的查找概率相等,则构造二叉排序树后查找不成功的平均查找长度是多少?(2)若对元素按照字典顺序从小到大
已知一个长为12的线性表(dec,feb,nov,oct,jul,sept,aug.apr,may,jun,jan,mar).
(1)若每个元素的查找概率相等,则构造二叉排序树后查找不成功的平均查找长度是多少?
(2)若对元素按照字典顺序从小到大排列以后,用折半查找法,则查找其中任意一个元素的平均查找长度ASL是多少?
已知一个长为12的线性表(dec,feb,nov,oct,jul,sept,aug.apr,may,jun,jan,mar).(1)若每个元素的查找概率相等,则构造二叉排序树后查找不成功的平均查找长度是多少?(2)若对元素按照字典顺序从小到大
/*以下是用c++ 实现的二叉排序树的源代码*/
#include<iostream.h>
typedef struct TreeNode
{
int key;
struct TreeNode *left;
struct TreeNode *right;
}treeNode;
class BiSortTree
{
public:
BiSortTree(void);
void desplayTree(void);//显示这个树
void insertTree(int key);//在树中插入一个值
deleteTree(int key);//在树中删除一个值
treeNode* searchTree(int key);//在树中查找一个值
BiSortTree();
private:
treeNode* buildTree(treeNode* head,int number);//建立一个树
treeNode* search(treeNode* head ,int key);//查找
treeNode* BiSortTree::searchParent(treeNode* head,treeNode* p);//查找出p的父亲节点的指针
treeNode* BiSortTree::searchMinRight(treeNode* head);//找到右子树中最小的节点
void showTree(treeNode* head);//显示
void destroyTree(treeNode* head);//删除
treeNode *Head;
};
//
void print()
{
cout<<endl<<endl<<"以下是对二叉排序树的基本操作:"<<endl
<<"1.显示树"<<endl
<<"2.插入一个节点"<<endl
<<"3.寻找一个节点"<<endl
<<"4.删除一个节点"<<endl;
}
void main()
{
BiSortTree tree;
int number;
int choiceNumber;
char flag;
while(1)
{
print() ;
cout<<"请选择你要进行的操作(1~4)"<<endl;
cin>>choiceNumber;
switch(choiceNumber)
{
case 1:
tree.desplayTree();break;
case 2:
cout<<"请插入一个数:"<<endl;
cin>>number;
tree.insertTree(number);
tree.desplayTree();
break;
case 3:
cout<<"请插入你要找数:"<<endl;
cin>>number;
if(tree.searchTree(number)==NULL)
{
cout<<"没有发现"<<endl;
}
else
{
cout<<"发现"<<endl;
}
break;
case 4:
cout<<"请输入你要删除的数:"<<endl;
cin>>number;
tree.deleteTree(number);
tree.desplayTree();
break;
default:break;
}
cout<<"你是否要继续(Y/N)?"<<endl;
cin>>flag;
if(flag=='N'||flag=='n')
break;
}
}
你的串号我已经记下,采纳后我会帮你制作