构建二叉排序树
任务描述
本关任务:设计出在二叉排序树中插入结点的算法,在此基础上实现构建二叉排序树的算法。
相关知识
实验目的
- 掌握顺序表的查找方法,尤其是二分查找方法;
- 掌握二叉排序树的建立及查找。
实验任务
说明:查找是软件设计中的最常用的运算,查找所涉及到的表结构的不同决定了查找的方法及其性能。二分查找是顺序表的查找中的最重要的方法,应能充分理解其实现方法和有关性能,并能借助其判定树结构来加深理解。二叉排序树结构在实验时具有一定的难度,可结合二叉树的有关内容和方法来实现。
实验说明
二叉查找树结构及其类型描述
二叉排序树的结构可以和前面二叉树部分完全类似,所不同的是,此处实验中大多以整型数的形式给出的,因此,结构中的元素类型不同,需要注意一下。 二叉排序树结构类型bst的描述如下:
struct bnode
{
struct bnode * lchild, rchild;
int data;
};
typedef struct bnode * bst;
具体的库函数可以查看头文件bst.h。
编程要求
请在右侧编辑器的命名空间内填写相关代码,给出一个待插入的序列,实现将序列的每个数字依次插入初始为空二叉排序树的算法。 若题目有其它要求,应当将题目要求的结果在solve函数内通过返回或引用的形式传递参数。
测试说明
平台会对你编写的代码进行测试:
函数说明:
bst solve(vector<int> & a);
参数 a 为待插入的序列
返回通过此法构建的二叉排序树根节点
右侧数据框说明:
测试输入:
第一行 1 个整数 n 表示序列的大小
第二行 n 个整数表示序列里的元素
实际输出:
输出你返回的二叉排序树中序遍历的序列
结构体说明:
struct bnode
{
struct bnode * lchild, rchild;
int data;
};
typedef struct bnode * bst;
库函数详细可查看右侧头文件 "bst.h"
代码:
#include "bst.h"
namespace exa {
bool Insert(bst &bt,int k){
if(bt==nullptr){
bt=new bnode;
bt->data=k;
bt->lchild=bt->rchild=nullptr;
return true;
}
else if(k==bt->data)
return false;
else if(k<bt->data)
return Insert(bt->lchild,k);
else
return Insert(bt->rchild,k);
}
bst solve(vector<int> a) {
bst bt=nullptr;
int n=a.size();
for(int i=0;i<n;i++)
Insert(bt,a[i]);
return bt;
}
}
二叉排序树的查找操作
任务描述
本关任务:设计算法在二叉排序树中查找指定值的结点。
相关知识
实验目的
- 掌握顺序表的查找方法,尤其是二分查找方法;
- 掌握二叉排序树的建立及查找。
实验任务
说明:查找是软件设计中的最常用的运算,查找所涉及到的表结构的不同决定了查找的方法及其性能。二分查找是顺序表的查找中的最重要的方法,应能充分理解其实现方法和有关性能,并能借助其判定树结构来加深理解。二叉排序树结构在实验时具有一定的难度,可结合二叉树的有关内容和方法来实现。
实验说明
二叉查找树结构及其类型描述
二叉排序树的结构可以和前面二叉树部分完全类似,所不同的是,此处实验中大多以整型数的形式给出的,因此,结构中的元素类型不同,需要注意一下。 二叉排序树结构类型bst的描述如下:
struct bnode
{
struct bnode * lchild, rchild;
int data;
};
typedef struct bnode * bst;
具体的库函数可以查看头文件bst.h。
编程要求
请在右侧编辑器的命名空间内填写相关代码,设计算法在二叉排序树中查找指定值的结点。 若题目有其它要求,应当将题目要求的结果在solve函数内通过返回或引用的形式传递参数。
测试说明
平台会对你编写的代码进行测试:
函数说明:
bool solve(bst t, int x);
参数 t 为二叉排序树,参数 x 为待查找的值
返回一个布尔值表示 x 是否在 t 中
右侧数据框说明:
测试输入:
第一行 1 个整数 n 表示序列的大小
第二行 n 个整数表示序列里的元素
第三行 1 个整数 x
实际输出:
输出你返回的布尔值
结构体说明:
struct bnode
{
struct bnode * lchild, rchild;
int data;
};
typedef struct bnode * bst;
库函数详细可查看右侧头文件 "bst.h"
代码:
#include "bst.h"
namespace exa {
bool solve(bst t, int x) {
if(t==NULL)return false;
if(t->data==x)return true;
if(x<t->data)
return solve(t->lchild,x);
else
return solve(t->rchild,x);
}
}
二叉排序树的删除操作
任务描述
本关任务:设计算法在二叉排序树中删除指定值的结点。
相关知识
实验目的
- 掌握顺序表的查找方法,尤其是二分查找方法;
- 掌握二叉排序树的建立及查找。
实验任务
说明:查找是软件设计中的最常用的运算,查找所涉及到的表结构的不同决定了查找的方法及其性能。二分查找是顺序表的查找中的最重要的方法,应能充分理解其实现方法和有关性能,并能借助其判定树结构来加深理解。二叉排序树结构在实验时具有一定的难度,可结合二叉树的有关内容和方法来实现。
实验说明
二叉查找树结构及其类型描述
二叉排序树的结构可以和前面二叉树部分完全类似,所不同的是,此处实验中大多以整型数的形式给出的,因此,结构中的元素类型不同,需要注意一下。 二叉排序树结构类型bst的描述如下:
struct bnode
{
struct bnode * lchild, rchild;
int data;
};
typedef struct bnode * bst;
具体的库函数可以查看头文件bst.h。
编程要求
请在右侧编辑器的命名空间内填写相关代码,设计算法在二叉排序树中删除指定值的结点。 若题目有其它要求,应当将题目要求的结果在solve函数内通过返回或引用的形式传递参数。
测试说明
平台会对你编写的代码进行测试:
函数说明:
void solve(bst & t, int x);
参数 t 为二叉排序树,参数 x 为待删除的值
右侧数据框说明:
测试输入:
第一行 1 个整数 n 表示序列的大小
第二行 n 个整数表示序列里的元素
第三行 1 个整数 x
实际输出:
输出 t 的中序遍历序列
结构体说明:
struct bnode
{
struct bnode * lchild, rchild;
int data;
};
typedef struct bnode * bst;
库函数详细可查看右侧头文件 "bst.h"
代码:
#include "bst.h" // 引用库函数文件
namespace exa { //请在命名空间内编写代码,否则后果自负
void deletel(bst p,bst & r){
bst q;
if(r->rchild!=NULL)
deletel(p,r->rchild);
else{
p->data=r->data;
q=r;
r=r->lchild;
delete q;
}
}
void deletep(bst & p){
bst q;
if(p->rchild==NULL){
q=p;
p=p->lchild;
delete q;
}
else if(p->lchild==NULL){
q=p;
p=p->rchild;
delete q;
}
else deletel(p,p->lchild);
}
void solve(bst & t, int x) {
if(t!=NULL){
if(x==t->data){
deletep(t);
return;
}
else if(x<t->data)
solve(t->lchild,x);
else
solve(t->rchild,x);
}
else return;
}
}
以上内容仅供参考哟,大家还需独立完成,巩固知识点^-^