算法课堂——枝繁叶茂(树)
这是我参与2022首次更文挑战的第9天,活动详情查看:2022首次更文挑战」。
通过前面的算法课堂,我们一起学习了数组、链表、队列、栈四种数据结构,在面对一些相关的算法问题时能够想到运用这些数据结构来帮助我们解决问题,但是似乎仍然有许多常见的问题不好用这些数据结构来处理,那么我们今天介绍的数据结构又是怎样的呢?它又能帮我们解决什么样的问题呢?
一、什么是树?
举一个生活中的例子,我们企业里的部门结构是什么样子的呢?我们可以模拟一下(仅仅是举个例子)
这种数据是不是像我们自然界中的树一样,在一个根上发散出许多的枝干,枝干也能散发出更多的枝干,最终枝繁叶茂呢?
那么在计算机的世界里,树的定义如下:
树(tree)是n(n>=0)个节点的有限集,当n=0时,为空树,在任意一个非空树中,有如下节点。
1、有且仅有一个特定的称为根的节点。 2、当n>1时,其余节点可分为m(m>0)个互不相交的有限集,每一个集合本身又是一个树,并叫做为根的子树。
学习一个新的事物,我们总喜欢找一些比较特殊的先学习,这个世界上树这么多,我们不太方便去研究各种伸展的奇奇怪怪的树,所以我们先来研究一种比较典型的树---二叉树
二、什么是二叉树?
二叉树,顾名思义,就是这种树的每个节点的子节点最多有两个。(可以是一个,可以是两个,可以没有。)
同时我们规定,二叉树的两个节点,左边的被称作左节点,右边的被称为右节点,和我们的左手右手一样,位置决定了它是左节点还是右节点,不能颠倒。
通过上面的介绍,很明显,树和我们队列、栈一样是逻辑结构,那么我们该如果用物理结构来表示他们,由于我们呢二叉树的定义中就有一个节点有两个子节点,所以我们很容易就能想到用链表来表示树:
链表的每个节点有存储数据的data,有指向左节点的left指针,有指向右节点的right的right指针。
那么用数组如何表示树呢?
这个问题稍微有些复杂,具体我们会在以后树的层序遍历中再和大家讨论这个问题
三、数有什么作用?
我们用树这种数据结构存储的数据对于我们解决问题有什么帮助呢?
时间关系,明天我会向大家介绍二叉树的作用以及二叉树的遍历。
请关注明天的算法课堂