一、【实验目的】
- 了解二叉排序树的定义,并结合二叉树的数据结构;
- 掌握二叉排序树的排序方法。
二、【实验内容】
二叉排序树采用二叉链表存储。写一个算法,删除结点值是X的结点。要求删除该结点后,此树仍然是一棵二叉排序树,并且高度没有增长(注:可不考虑被删除的结点是根的情况)。
三、【实验步骤与要求】
- 了解二叉排序树的定义,并结合二叉树的数据结构;
- 掌握二叉排序树的排序方法。
#include<stdio.h>
#include<malloc.h>
//函数结果状态代码
#define TRUE 1
#define FALSE 0
#define OK 1
#define ERROR 0
#define INFEASIBLE -1
#define OVERFLOW -2
// - - 对数值型关键字
#define EQ(a,b) ((a)==(b))
#define LT(a,b) ((a)< (b))
#define LQ(a,b) ((a)<=(b))
typedef int Status; //Status是函数的类型,其值是函数结果代码
typedef int KeyType; //关键字类型int整型
typedef int TElemType; //树结点数据类型定义为int型,也是关键字类型
//------二叉树的二叉链表存储表示-------
typedef struct BiTNode
{
TElemType data; //树结点数据类型为int型,也是关键字类型
struct BiTNode *lchild,*rchild; //左右孩子指针,指向孩子结点
}BiTNode,*BiTree; //结构体变量,原型和指针型
//------基本操作的函数原型说明------
Status SearchBST(BiTree T,KeyType key,BiTree f,BiTree &p);
//在根指针T所指二叉排序树中递归地查找其关键字等于key的数据元素,若成功,
//则指针p指向该数据元素结点,并返回TRUE,否则指针p指向查找路径上访问的
//最后一个结点并返回FALSE指针,指针f指向T的双亲&#