二叉排序树可以对一组数据进行查找、插入、删除 *** 作。
简介二叉排序树要么是空二叉树,要么具有如下特点:
如果其根结点有左子树,那么左子树上所有结点的值都小于根结点的值;
如果其根结点有右子树,那么右子树上所有结点的值都大小根结点的值;
二叉排序树的左右子树也要求都是二叉排序树。
简言之,二叉排序树的左子树、根节点、右子树中的数据依次递增!
1.左子树的数据比根结点数据小
2.右子树的数据比根结点数据大
使用C++面向对象实现,使用二叉树的存储结构
结构体声明struct BiNode{ int data; BiNode *lchild; BiNode *rchild; };类的声明
class BiSortTree{ public: BiSortTree(int a[],int n); ~BiSortTree(){Realese(root);} BiNode *Insert(int x){ return Insert(root, x);} BiNode *Search(int x){ return Search(root, x);} private: BiNode *root; BiNode *Insert(BiNode *bt,int x); BiNode *Search(BiNode *bt,int x); void Realese(BiNode * bt); };插入函数
为保证二叉排序树的特征,在插入时,应先判断插入的位置:先与根比大小,之后递归调用插入函数将数据放入空位置!
BiNode *BiSortTree::Insert(BiNode *bt,int x){ //插入元素插入到空位置 if(bt==NULL){ //找到空位置 BiNode *s=new BiNode; s->data=x; //工作指针 bt=s; return bt; } //插入元素应先判断插入的位置:先与根比大小,之后递归调用插入函数 else if(x < bt->data) bt->lchild=Insert(bt->lchild,x); else if(x > bt->data) bt->rchild=Insert(bt->rchild,x); }构造函数
构造的就是不断插入结点的过程,构造函数要完成两件事:
-
根结点初始化;
-
不断调用插入函数,使得数据依次录入二叉排序树中。
BiSortTree::BiSortTree(int a[],int n){ //传入数据及其数目 //构造的就是不断插入结点的过程 root=NULL; //初始化根节点 int i; for(i=0;i查找函数 查找过程类似二分查找,以根节点为基准,在合适区域查找指定元素
BiNode *BiSortTree::Search(BiNode *bt,int x){ if(bt==NULL) return NULL; if(bt->data == x) return bt; else if(x < bt->data) return Search(bt->lchild,x); else if(x > bt->data) return Search(bt->rchild,x); }析构函数二叉树本质上是二叉链表,属于动态存储,因此需手动析构。
void BiSortTree::Realese(BiNode * bt){ if(bt==NULL) return ; else{ Realese(bt->lchild); Realese(bt->rchild); delete bt; } }欢迎分享,转载请注明来源:内存溢出
评论列表(0条)