博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
【算法•日更•第四十五期】静态二叉排序树(建立)
阅读量:5288 次
发布时间:2019-06-14

本文共 976 字,大约阅读时间需要 3 分钟。

▎前言

  小编虽然已经会了二叉排序树,但是却不明白静态二叉排序树和二叉排序树有什么关系。

  结合平衡二叉排序树(例如:红黑树)食用本篇博客,效果更佳哦~

  (同时也内含二叉排序树的相关知识)

▎静态二叉排序树

『引入』

  这个东西要从线段树说起,别问我为什么扯这么远

  。

  不得不说,线段树是个好东西,每次都会把一个区间劈成左右两半,运用了分治的思想。

  但是线段树更多的是用来处理区间类的问题,在遇到数据点统计问题的时候,也能算出来,不过多保留了一下一些冗余的东西。

  比如说:线段树总是定义过多的l,r,mid指针来指向区间,这就是冗余信息;

  再比如说:线段树的节点是用来存储区间的,而在处理点的问题时,是不需要的,这就是冗余信息。

  还有:在处理点时,线段树的区间一分为二,是通过一个分割点的,只要保留这个分割点就可以了。

  像这样的冗余信息不止这些,但是如果我们换成二叉排序树就不同了。

『定义』

  个人认为二叉排序树和静态二叉排序树在定义上没有区别。

『特点』

  用例子来说吧:

  比如说现在有这样一组数据:3,6,9,2,5,4,1。

  先明确一下位置关系:

  

  假设当前节点为i,那么左子树编号为i×2,右子树编号为i×2+1,所以我们用数组进行存储的时候就是按照这个规律来存储的。

  先创建一个映射X={1,2,3,4,5,6,9}(说白了就是排序一遍)。

  接着用这个映射按照二叉排序树的性质开始填入:

  

  发现规律了吗?1,2,3,4,5,6,9恰好是这棵树的中序遍历顺序。

  也就是说静态二叉排序树插入点是靠中序遍历的,但是二叉排序树不一样,插入方式和搜索时很像。

▎静态二叉排序树的查找

  这个很简单吧,直接上代码:

1 void build(int i)2 {3     if(i*2<=n) build(i*2);4     tree[i]=x[++cnt];5     if(i*2+1<=n) build(i*2+1);6 }

▎静态二叉排序树的优点

  容易看出,静态二叉排序树及其相似满二叉树,有时就是!

  所以静态二叉排序树天生就是平衡树。  

转载于:https://www.cnblogs.com/TFLS-gzr/p/11368440.html

你可能感兴趣的文章
常用的分布式事务解决方案
查看>>
判断是否为手机端与pc端,为手机端跳转到某个页面,pc端就不跳转
查看>>
<实训|第六天>偷偷让新手的Linux无限重启附linux主机名称不是随便乱改的!
查看>>
单例模式
查看>>
Log4j自学笔记
查看>>
[Android]下拉刷新控件RefreshableView的实现
查看>>
java_method_正则校验
查看>>
【日常】【WPF】实现背景模糊效果
查看>>
oracle-ORA-00001: 违反唯一约束条件 --解决方法
查看>>
跨域访问
查看>>
将多张图片和文字合成一张图片
查看>>
自己动手写ORM(01):解析表达式树生成Sql碎片
查看>>
code3731 寻找道路
查看>>
maven内置属性
查看>>
java 的File文件
查看>>
如何使用USBWebserver在本机快速建立网站测试环境
查看>>
PHP实现删除非站内外部链接实例代码
查看>>
css relative
查看>>
百度Ueditor编辑器的Html模式自动替换样式的解决方法
查看>>
变量提升
查看>>