二叉排序树
二叉排序树也是一棵二叉树,所谓二叉树,就是“任何节点最多只允许两个子节点”,这两个子节点称为左右子节点。
//二叉排序树
#include<iostream>
using namespace std;
typedef int status;
#define true 1
#define false 0
//二叉链表结点结构定义
typedef struct Bitnode
{
int data;
struct Bitnode *left,*right;
}Bitnode,*Bitree;
//操作
status Searchbst(Bitree T,int key,Bitree f,Bitree *p);
status Insertbst(Bitree *T,int key);
status Delete(Bitree *p);
status Deletebst(Bitree *T,int key);
void Createbst(Bitree *T,int a[],int n);
void Showbst(Bitree T); //中序遍历输出二叉树
//二叉排序树的查找,查找T中是否存在Key
//f指向T的双亲,当T指向根节点时,因此f的初始调用值为Null
//查找成功,指针p指向该数据元素的结点,返回TRUE
//查找失败,P指向查找路径上访问的最后一个元素,返回false
status Searchbst(Bitree T,int key,Bitree f,Bitree *p)
{
if(!T) //查找不成功,用来判断当前二叉树是否到叶子结点
{
*p=f;
return false;
}
else if(key==T->data) //查找成功
{
*p=T;
return true;
}
else if(key<T->data)
return Searchbst(T->le