二叉排序树浅讲
来源:互联网 发布:app软件操作说明书 编辑:程序博客网 时间:2024/05/20 05:46
二叉排序树是一种树形结构,这种树有如下几种性质
- 若左子树不空,则左子树所有节点值均小于其根节点值
- 若右子树不空,则右子树所有节点值均大于其根节点值
其左右子树也分别是二叉排序树
有了这些性质,我们便可以证明出二叉排序树的中序遍历必然有序:
下图是一个普通的二叉排序树:那么二叉排序树就可以在OI的道路上有所应用,当然以一些小牛的本领,自然只能够使用其排序,毕竟这只是二叉排序树浅讲……所以我们引入一道例题,输入n个数,将他们排序:
分析:这一题正好符合二叉排序树的思想和性质,也就是说可以在建树后使用中序遍历遍历即可。见代码:
#include<bits/stdc++.h>using namespace std;typedef struct node{ int data; node *lchild,*rchild; }*tree;tree t;void pre_crt(tree &bt,int x){ if(bt){ if(bt->data>x) pre_crt(bt->lchild,x); else pre_crt(bt->rchild,x); } else{ bt=new node; bt->lchild=bt->rchild=NULL; bt->data=x; return; }}void inorder(tree bt){ if(bt){ inorder(bt->lchild); printf("%d ",bt->data); inorder(bt->rchild); }}int main(){ int i,j,k,n,m; scanf("%d",&n); for(i=1;i<=n;i++){ int x; scanf("%d",&x); pre_crt(t,x); } inorder(t); puts(""); return 0;}
当然,一些有深度思考的人们就会想:如果每一个数都比根节点小,或者都比根节点大,那么树不就退化成一条链了吗?『见下图』:
这时就不属于二叉排序树浅谈了,为了维护树的高度,需要用到平衡二叉树『这个东西下次再讲吧』。
阅读全文
0 0
- 二叉排序树浅讲
- 二叉排序树(BST) 小讲 【 理解 + 例题 】 更新ing ...
- 二叉排序树
- 二叉排序树
- 二叉排序树
- 二叉排序树
- 二叉排序树
- 二叉排序树
- 二叉排序树
- 二叉排序树
- 二叉排序树
- 二叉排序树
- 二叉排序树
- 二叉排序树
- 二叉排序树
- 二叉排序树
- 二叉排序树
- 二叉排序树
- Python: 你不知道的 super
- matlab生成dll
- App运营推广之高效方式
- 数据传递与接收---Eventbus的简单使用
- DZY Loves Modification CodeForces
- 二叉排序树浅讲
- 数据库基础知识学习
- Vue Prop使用
- Spring bean的生命周期
- springmvc---web.xml的配置文件
- 基于SSM的RBAC权限系统(5)-利用ajax,JQuery实现动态搜索
- String--引用计数写时拷贝
- java从入门到放弃
- HDU6033 Add More Zero(取对数)