什么是树、二叉树以及二叉查找树

发布时间:2021-12-13 17:37:54 作者:柒染
来源:亿速云 阅读:183

本篇文章为大家展示了什么是树、二叉树以及二叉查找树,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。

说起树,大家都不陌生,毕竟是日常生活中常见的事物。但是今天的主角不是树木,我们来聊聊数据结构中的树、二叉树和二叉查找树,以及它们的基本操作!

一、树与二叉树

1.1 什么是树?

树是一种数据结构,它是由n(n>=1)个有限结点组成一个具有层次关系的集合。把它叫做“树”是因为它看起来像一棵倒挂的树,也就是说它是根朝上,而叶朝下的。

树是由结点和边组成的,不存在环的一种数据结构。通过下图,我们就可以更直观的认识树的结构。

什么是树、二叉树以及二叉查找树

树满足递归定义的特性。也就是说,如果一个数据结构是树结构,那么剔除掉根结点后,得到的若干个子结构也是树,通常称作子树。

在一棵树中,根据结点之间层次关系的不同,对结点的称呼也有所不同。我们来看下面这棵树,如下图所示:
什么是树、二叉树以及二叉查找树
不同结点的关系与称呼如下:

当有了一棵树之后,还需要用深度来描述这棵树中结点的位置。如上图所示,结点的层次从根结点算起:

树中结点的最大层次数,就是这棵树的树深(称为深度,也称为高度)因此这是一棵深度为 4 的树。

1.2 什么是二叉树?

在树的大家族中,有一种被高频使用的特殊树,它就是二叉树。在二叉树中,每个结点最多有两个分支,即每个结点最多有两个子结点,分别称作左子结点右子结点

在二叉树中,有两个最为特殊的类型,如下图所示:

什么是树、二叉树以及二叉查找树

你可能会困惑,完全二叉树看上去并不完全,但为什么这样称呼它呢?这其实和二叉树的存储有关系。存储二叉树有两种办法,一种是基于指针的链式存储法,另一种是基于数组的顺序存储法

什么是树、二叉树以及二叉查找树

之所以称为完全二叉树,是从存储空间利用效率的视角来看的。对于一棵完全二叉树而言,仅仅浪费了下标为 0 的存储位置。而如果是一棵非完全二叉树,则会浪费大量的存储空间。

如下图所示的非完全二叉树,它既需要保留出 5 和 6 的位置。同时,还需要保留 5 的两个子结点 10 和 11 的位置,以及 6 的两个子结点 12 和 13 的位置。这样的二叉树,没有完全利用好数组的存储空间。
什么是树、二叉树以及二叉查找树


二、树的前序、中序、后序遍历

接下来,我们以二叉树为例介绍树的操作,其他类型的树的操作与二叉树基本相似。

可以发现,我们以前学到的数据结构都是“一对一”的关系,即前面的数据只跟下面的一个数据产生了连接关系,例如链表、栈、队列等。而树结构则是“一对多”的关系,即前面的父结点,跟下面若干个子结点产生了连接关系。

在“一对一”的结构中,查找具有某个数值,可以直接按顺序遍历每一条数据。可是,树是“一对多”的关系,那该按什么顺序遍历呢?

其实,遍历一棵树,有非常经典的三种方法,分别是前序遍历、中序遍历、后序遍历。这里的序指的是父结点的遍历顺序,前序就是先遍历父结点,中序就是中间遍历父结点,后序就是最后遍历父结点。

不管哪种遍历,都是通过递归调用完成的。如下图所示:

什么是树、二叉树以及二叉查找树


三、二叉查找树的特性

对于没有任何特殊性质的二叉树而言,抛开遍历的时间复杂度以外,真正执行增加和删除操作的时间复杂度是 O(1)。树数据的查找操作和链表一样,都需要遍历每一个数据去判断,所以时间复杂度是 O(n)。

但当二叉树具备一些特性的时候(比如二叉查找树),则可以利用这些特性实现时间复杂度的降低。

二叉查找树(也称作二叉搜索树)具备以下几个的特性:

什么是树、二叉树以及二叉查找树
所以二叉查找树可以简单的认为是,是一个按规则排好序的二叉树。


四、二叉查找树的增删查操作

3.1 查找操作

在利用二叉查找树执行查找操作时,我们可以进行以下判断:

这样的“二分查找”所消耗的时间复杂度就可以降低为 O(logn)。关于二分查找,后面会在算法部分文章讲到。

3.2 插入操作

在二叉查找树执行插入操作也很简单。从根结点开始,如果要插入的数据比根结点的数据大,且根结点的右子结点不为空,则在根结点的右子树中继续尝试执行插入操作。直到找到为空的子结点执行插入动作。

如下图所示,如果要插入数据 X 的值为 14,则需要判断 X 与根结点的大小关系:

因为此时左子树为空,则直接通过指针建立 15 结点的左指针指向结点 X 的关系,就完成了插入动作。
什么是树、二叉树以及二叉查找树
二叉查找树插入数据的时间复杂度是 O(logn)。但这并不意味着它比普通二叉树要复杂。原因在于这里的时间复杂度更多是消耗在了遍历数据去找到查找位置上,真正执行插入动作的时间复杂度仍然是 O(1)。

3.3 删除操作

二叉查找树的删除操作会比较复杂,这是因为删除完某个结点后的树,仍然要满足二叉查找树的性质。我们分为下面三种情况讨论。

(1)如果要删除的结点是某个叶子结点,则直接删除,将其父结点指针指向 null 即可。
什么是树、二叉树以及二叉查找树

(2)如果要删除的结点只有一个子结点,只需要将其父结点指向的子结点的指针换成其子结点的指针即可。
什么是树、二叉树以及二叉查找树(3)如果要删除的结点有两个子结点,则有两种可行的操作方式。

什么是树、二叉树以及二叉查找树

什么是树、二叉树以及二叉查找树

上述内容就是什么是树、二叉树以及二叉查找树,你们学到知识或技能了吗?如果还想学到更多技能或者丰富自己的知识储备,欢迎关注亿速云行业资讯频道。

推荐阅读:
  1. 八、树和二叉树
  2. 如何实现二叉查找树

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

二叉树 二叉查找树

上一篇:如何自定义状态栏notification布局

下一篇:Docker的网络模式有哪些

相关阅读

您好,登录后才能下订单哦!

密码登录
登录注册
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》