【算法•日更•第四十五期】静态二叉排序树(建立)
▎前言
小编虽然已经会了二叉排序树,但是却不明白静态二叉排序树和二叉排序树有什么关系。
结合平衡二叉排序树(例如:红黑树)食用本篇博客,效果更佳哦~
传送门(同时也内含二叉排序树的相关知识)
▎静态二叉排序树
☞『引入』
这个东西要从线段树说起,别问我为什么扯这么远。
不得不说,线段树是个好东西,每次都会把一个区间劈成左右两半,运用了分治的思想。
但是线段树更多的是用来处理区间类的问题,在遇到数据点统计问题的时候,也能算出来,不过多保留了一下一些冗余的东西。
比如说:线段树总是定义过多的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
- 我的技术投资策略:如何决定学习哪一个新技术的?
- 我的技术投资策略:如何决定学习哪一个新技术的?
- Android6.0源码之蓝牙研究汇总(一)--from初学者
- Android6.0蓝牙协议之OPP
- 简单直白教你理解Java中四大引用强引用,软引用,弱引用,虚引用
- ubuntu系统上配置git
- Android源码编译出错No rule to make...
- Android中资源各种引用方式?,@,@*等等
- git撤销修改各种情况
- Android中ContentProvider简介
- 利用Androidstudio开发Java工程图文详解
- 小程序学习笔记分享(含1-tabBar、轮播图和九宫格)
- Android中ViewStub控件分析及使用
- 如何实现微信小程序的滚动加载功能
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- python第十三课——嵌套循环
- python第十四课--排序及自定义函数
- python第十四课--排序及自定义函数之案例一:选择排序
- python第十四课--排序及自定义函数之案例二:冒泡排序
- python第十四课--排序及自定义函数之自定义函数(案例一)
- python第十四课--排序及自定义函数之自定义函数(案例二)
- python第十四课--排序及自定义函数之自定义函数(案例三)
- python第十四课--排序及自定义函数之自定义函数(案例四)
- python第十四课--排序及自定义函数之自定义函数(案例五)
- python第十五课——全局变量and局部变量
- python第十六课——ascii码
- python第十六课——外部函数and内部函数
- python第十七课——列表生成式
- python第十八课——常用内置函数
- python第十九课——random模块中的常用函数