查找之二:二叉排序树
2016-04-17 21:29
253 查看
先说一下定义(尽管大家后知道…………)~!~
二叉排序树(Binary Sort Tree),又称为二叉查找树。它或者是一颗空树,或者是具有以下性质的二叉树:
若它的左子树不空,则左子树上所有结点的均小于它的根结点的值;
若它的右子树不空,则右子树上所有结点的均大于它的根结点的值;
它的左右子树也分别为二叉排序树。
其实,上面使用了递归定义,是不是也暗示着我们的查找程序也将使用递归呢?看看下面的代码吧~~
1. 二叉排序树查找
然后我们来看看如何实现查找吧
2.二叉排序树的插入操作
其实就是将关键字放到合适的位置而已~~
3.创建二叉排序树
创建无非就是把数据insert的过程~~
二叉排序树(Binary Sort Tree),又称为二叉查找树。它或者是一颗空树,或者是具有以下性质的二叉树:
若它的左子树不空,则左子树上所有结点的均小于它的根结点的值;
若它的右子树不空,则右子树上所有结点的均大于它的根结点的值;
它的左右子树也分别为二叉排序树。
其实,上面使用了递归定义,是不是也暗示着我们的查找程序也将使用递归呢?看看下面的代码吧~~
1. 二叉排序树查找
//首先我们先提供一个二叉链表结点结构定义 typedef struct BiTNode{//结点结构 int data;//结点数据 struct BiTNode *lchild,*rchild;//左右孩子指针 }BiTNode,*BiTree;
然后我们来看看如何实现查找吧
//递归查找而茶排序树T中是否存在,key //指针f指向T的双亲,其初始调用值为NULL //若查找成功,则指针p指向该数据元素结点,并返回false; //若指针p指向查找路径上访问的最后一个结点并返回FAlse bool 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->lchild,key,T,p); }else return searchBST(T->rchild,key,T,p); } //可以看到递归的写法确实很简洁~~
2.二叉排序树的插入操作
其实就是将关键字放到合适的位置而已~~
//当二叉排序树T中不存在关键字等于key的数据元素时 //输入key并返回true,否则返回false bool insertBST(BiTree* T,int key){ BiTree p,s; if(!searchBST(*T,key,NULL,&p)){//查找不成功 s = (BiTree)malloc(sizeof(BiTNode)); s->data = key; s->lchild = s->rchild = NULL; if(!p){ //这里p指向访问的最后一个结点 &T = s;//插入s为根结点 }else if(key < p->data){ p->lchild = s; }else p->rchild = s; return true; }else return false; }
3.创建二叉排序树
创建无非就是把数据insert的过程~~
void createBST(const int* arr,const int len){ int i ; BiTree T = NULL; for(i=0;i < len;i++){ insertBST(&T,arr[i]); } }
相关文章推荐
- TCP/IP常见问题总结(四)
- 敏捷团队转型
- libevent高性能网络库源码分析——介绍(一)
- python XlsxWriter模块创建aexcel表格
- python内置函数
- jQuery重置select
- 幼稚的错误
- 向量的叉积
- CentOS 7 上安装 Docker与其它后续操作
- 设计模式介绍(一)
- Eclipse依赖打包问题
- IOS原声二维码条形码扫描实现
- hihocoder #1035 : 自驾旅行 III
- mybatis SQL性能调优
- 对话框Dialog控件的使用
- IOS原声二维码条形码扫描实现
- ReadWriteLock用法
- Map容器——TreeMap及常用API,Comparator和Comparable接口
- JAVA第五次作业
- di'w第五次作业