b2科目四模拟试题多少题驾考考爆了怎么补救
b2科目四模拟试题多少题 驾考考爆了怎么补救

【算法日更第四十五期】静态二叉排序树(建立)

电脑杂谈  发布时间:2020-03-16 11:01:30  来源:网络整理

排序二叉树的建立_二叉排序树 建立_二叉树的排序

▎前言

小编虽然早已会了二叉排序树,但是仍不明白静态二叉排序树和二叉排序树有哪个关系。

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

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

▎静态二叉排序树

『引入』

二叉排序树 建立_排序二叉树的建立_二叉树的排序

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

戳这里快速上手线段树。

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

但是线段树更多的是拿来处理区间类的难题二叉排序树 建立,在遭遇数据点统计问题的之后,也可算起来,不过多保留了一下一些冗余的东西。

比如说:线段树总是定义过多的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 }

▎静态二叉排序树的特点

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

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


本文来自电脑杂谈,转载请注明本文网址:
http://www.pc-fly.com/a/jisuanjixue/article-144343-1.html

    相关阅读
      发表评论  请自觉遵守互联网相关的政策法规,严禁发布、暴力、反动的言论

      • 张双竹
        张双竹

        他必须在全球政治军事经济利益中角逐

      热点图片
      拼命载入中...