Java 数据结构 二叉树(一)二叉查询树

目录

树的种类

二叉树

二叉查找树

满二叉树

 ​编辑

完全二叉树

二叉树的数据存储

链式存储

数组存储

寻址方式:

二叉树的遍历(了解即可)

​编辑

二叉查询树缺点


前言-与正文无关

        生活远不止眼前的苦劳与奔波,它还充满了无数值得我们去体验和珍惜的美好事物。在这个快节奏的世界中,我们往往容易陷入工作的漩涡,忘记了停下脚步,感受周围的世界。让我们一起提醒自己,要适时放慢脚步,欣赏生活中的每一道风景,享受与家人朋友的温馨时光,发现那些平凡日子里隐藏的幸福时刻。因为,这些点点滴滴汇聚起来的,才是构成我们丰富多彩生活的本质。希望每个人都能在繁忙的生活中找到自己的快乐之源,不仅仅为了生存而工作,更为了更好的生活而生活。

        送你张美图!希望你开心!

树的种类

旧金山的数据结构可视化助你了解算法数据结构的变化。

Data Structure Visualization

二叉树

二叉查找树

当然我们最常说的二叉树就二叉查找树也叫二叉排序树。下面讲的满二叉树和完全二叉树其实了解一下即可,不常说常用!

任意非空二叉查找树,必定满足左子节点值 < 根节点值;根节点值 < 右子节点值 ,没有键值相等的节点

在二叉查找树中查找 N ,首先从根节点开始,将根节点设置为第一个访问的节点,若当前节点为空,则查找失败,若 N 与当前节点值相等,返回当前节点,若 N 大于当前节点值,则从当前节点的右子节点开始查找,否则从当前节点的左子节点开始查找,直到返回目标节点或者查找失败;如下图在二叉查找树中查找目标 8 ,查找路径依次为 ⑨ --> ⑥ --> ⑦ --> ⑧

Java 数据结构 二叉树(一)二叉查询树_第1张图片

对于一个节点分布相对均衡的二叉查找树来说,如果节点总数是 n ,那么搜索节点的时间复杂度就
O(logn),和树的深度是一样的。这种方式正是二分查找思想。

满二叉树

一个二叉树的所有非叶子节点都存在左右子节点,并且所有叶子节点都在同一层级上,那么这个树就是满二叉树

 Java 数据结构 二叉树(一)二叉查询树_第2张图片

完全二叉树

对一个有 n 个节点的二叉树,按层级顺序编号,则所有节点的编号为从 1 n 。如果这个树所有节点和同
样深度的满二叉树的编号为从 1 n 的节点位置相同,则这个二叉树为完全二叉树

Java 数据结构 二叉树(一)二叉查询树_第3张图片

区别:

满二叉树要求所有分支都是满的;而完全二叉树只需保证最后一个节点之前的节点都齐全即可

二叉树的数据存储

二叉树属于逻辑结构(你看到图片是一种抽象祝你理解结构方式,实际在生产如何用代码构成,还是使用我们常用数组、链表【如linkedList】),可以使用链表和数组进行存储。
链式存储

Java 数据结构 二叉树(一)二叉查询树_第4张图片

二叉树的每一个节点包含 3 部分 ,存储数据的data 变量 ,指向左孩子的left 指针 ,指向右孩子的right 指针,其实说白了就是链表结构
数组存储
使用数组存储时,会按照层级顺序把二叉树的节点放到数组中对应的位置上。如果某一个节点的左孩子或右孩子空缺,则数组的相应位置也空出来
Java 数据结构 二叉树(一)二叉查询树_第5张图片
寻址方式:
一个父节点的下标是 n ,那么它的左子节点下标就是 2×n+1 、右子节点下标就是 2*(n+1)
对于一个稀疏的二叉树(子节点不满)来说,用数组表示法是非常浪费空间的 (数组毕竟是一个连续内存)。所以二叉树一般用链表存储实现。(二叉堆除外)

二叉树的遍历(了解即可)

二叉树遍历拥有三种实现类方法

前序遍历【DLR】:前序遍历也叫先根遍历,先访问根节点然后遍历左子树,最后遍历右子树;

Java 数据结构 二叉树(一)二叉查询树_第6张图片

中序遍历【LDR】:中序遍历也叫中根遍历,先遍历左子树然后访问根节点,最后遍历右子树;

Java 数据结构 二叉树(一)二叉查询树_第7张图片

后序遍历【LRD】:后序遍历也叫后根遍历,先遍历左子树然后遍历右子树,最后访问根节点;

Java 数据结构 二叉树(一)二叉查询树_第8张图片

二叉查询树缺点

有了二叉查询树为什么要使用平衡二叉查找树 呢?

二叉查找树并非平衡树,它只限制了左右子树与根点之间的大小关系,只有在平衡二叉查找树时,其时间复杂度才能达到 O(logn) ,并且在极端情况下它甚至会退化成链表;在不平衡的情况下就要遍历比对多次。

如下所示在新创建的二叉查找树上依次添加数据 1、2、3、4、5、6、7、8、9、10 节点,此二叉查找树就退化成了链表,增删查性能也退化到了 O(n)。

Java 数据结构 二叉树(一)二叉查询树_第9张图片

 所以为了避免这种情况,就出现了 AVL 及红黑树这种能自平衡的二叉查找树;AVL 树是严格的平衡二叉树,必须满足所有节点的左右子树高度差不超过 1;

详情我的下一章:Java 数据结构 二叉树(二)

------------------------------------------与正文内容无关------------------------------------
 如果觉的文章写对各位读者老爷们有帮助的话,麻烦点赞加关注呗!作者在这拜谢了!

混口饭吃了!如果你需要Java 、Python毕设、商务合作、技术交流、就业指导、技术支持度过试用期。请在关注私信我,本人看到一定马上回复!

这是我全部文章所在目录,看看是否有你需要的,如果遇到觉得不对地方请留言,看到后我会查阅进行改正。

A乐神-CSDN博客

你可能感兴趣的:(算法和数据结构,数据结构)