DS博客作业07--查找
1.本周学习总结
1.思维导图
2.谈谈你对查找运算的认识及学习体会。
查找这一章主要学习了几种查找的算法,顺序查找和折半查找之前就有所接触,学起来感觉比较容易接受,但是平衡二叉树和b+b-树就感觉比较难,特别是LL,LR,RR,RL调整还不是很熟练,哈希表查找感觉比平衡二叉树要好理解,做题也不是那么费劲;
2.PTA实验作业
2.1.题目1:6-1 二叉搜索树的操作集
2.1.1设计思路
BinTree Insert( BinTree BST, ElementType X ) //函数Insert将X插入二叉搜索树BST并返回结果树的根结点指针
{
if//定义根节点指针
//将X插入根结点
//根节点的左右孩子初始化为空;
else if //如果x小于父亲结点插到节点的左孩子;
else if//x大于父亲结点时候插到根结点的右孩子 ;
//返回根结点指针;
}
BinTree Delete( BinTree BST, ElementType X )
{
if(!BST)
{
//树中找不到元素X;
}
else{
if
else if//X小于或大于父亲结点时直接删除X;
else if{ //当x=父亲结点时
if{
//找到右孩子中最小结点
//最小节点的值赋给父亲结点
//删除该结点的数据;
}
else{
//左孩子为空,右孩子不为空
//右孩子不空,左孩子空
}
}
}
return BST;
}
Position Find( BinTree BST, ElementType X )//在二叉搜索树BST中找到X,返回该结点的指针;如果找不到则返回空指针;
{
}
Position FindMin( BinTree BST ) //FindMin返回二叉搜索树BST中最小元结点的指针;
{
}
Position FindMax( BinTree BST ) //FindMax返回二叉搜索树BST中最小元结点的指针;
{
}
2.1.2代码截图
2.1.3本题PTA提交列表说明
Q1:在删除那个函数里面判断X是否大于或小于BST->Data时忽略了小于这个情况,只过空树那个测试点;
A2:添加一个判断条件,else if(X>BST->Data)BST->Right=Delete(BST->Right,X);//小于错误 就修正了错误;
2.2 题目2:6-1是否是二叉搜索树
2.2.1设计思路
bool IsBST ( BinTree T )
{
BinTree BT=NULL,BT1=NULL;
if(T==NULL) return true; //二叉树为空时返回ture;
else if(T->Left==NULL&&T->Right==NULL) return true; //左右子树为空返回ture;
BT=T->Left; //BT指向二叉树的左子树;
if(BT!=NULL)
{
while(BT->Right!=NULL)
{
BT=BT->Right; //使BT指向二叉树左子树的最右端点;
}
}
BT1=T->Right; // BT1指向二叉树的右子树;
if(BT1!=NULL)
{
while(BT1->Left!=NULL)
{
BT1=BT1->Left; //使BT1指向二叉树右子树的最左端点;
}
}
//需要满足左子树中的最大值小于根节点的键值;
//右子树最小值大于根节点的键值;则返回ture;
if(BT->Data<T->Data&&BT1->Data>T->Data)
{
return true;
}
else return false;
}
2.2.2代码截图
2.2.3本题PTA提交列表说明
Q:没考虑空树这种情况,看了题目后说空树也是二叉树,
A:空树时,或左右子树都为空时要返回false;
2.3 题目3:7-1 QQ帐户的申请与登陆
2.3.1设计思路
2.3.2代码截图
2.3.3本题PTA提交列表说明
Q:第一次错是每次输入一行数据就运行结束,一开始以为是循环条件错了,后面发现return 0写到了while里面,导致运行一次就结束
Q2:格式错误,把输出样例复制就解决了;
3阅读代码
3.1 题目1.判断一个单词是否拼写正确
3.2 解题思路
用二叉搜索树的插入方式向二叉搜索树中插入一些字符串,然后再用二叉搜索树的查找方式查找该元素是否存在,如果该元素存在的话,代表;拼写的字符串是正确的,否则不正确。
3.3 代码截图
3.4 学习体会
通过阅读这个题目,我了解到了可以利用二叉树来存放一些数据,然后再通过查找的方式与树中的数据进行对比校验,可以判断出数据是否在树中或者数据是否正确