加入收藏 | 设为首页 | 会员中心 | 我要投稿 河北网 (https://www.hebeiwang.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 建站 > 正文

一文看懂数据结构中的树 值得收藏

发布时间:2019-09-04 00:25:51 所属栏目:建站 来源:优达学城Udacity
导读:凡是在开始学编程的时辰,你会打仗一些常用数据布局。 到最后一样平常会学到哈希表。对付修读计较机科学学位的伴侣,你凡是要上专门的数据布局课,从相识有关链表、行列和栈的各类常识。这些统称为线性数据布局,由于依逻辑序次从新排到尾。 当你开始进入下一
副问题[/!--empirenews.page--]

凡是在开始学编程的时辰,你会打仗一些常用数据布局。

一文看懂数据布局中的树 值得保藏

到最后一样平常会学到哈希表。对付修读计较机科学学位的伴侣,你凡是要上专门的数据布局课,从相识有关链表、行列和栈的各类常识。这些统称为线性数据布局,由于依逻辑序次从新排到尾。

当你开始进入下一阶段,进修树和图布局时,工作就会显得比处理赏罚线性数据布局伟大许多。这促使我们专门写一篇文章来切磋“树”这种特定的数据布局帮各人答疑解惑。

本文内容包罗:

  • 树的界说树的布局事变道理代码实现

此刻就开始进修吧 :)

树的界说

凡是对编程新手来说,线性数据布局比树和图要更好领略。我们此地方说的树,等于以条理化方法组织和存放数据的特定命据布局。

实例理会

为了领略“条理化”的意思,我们以家谱为例:内里有祖怙恃、怙恃、孩子、兄弟姐妹。这就是用条理化的模式来构建家谱。

一文看懂数据布局中的树 值得保藏

上图就是我的家谱。Tossico,Akikazu,Hitomi和Takemi作为我的祖怙恃和外祖怙恃处于最顶层。Toshiaki 和 Juliana是我怙恃。TK,Yuji,Bruno 和 Kaio 则是我和我的的兄弟姐妹们。

一文看懂数据布局中的树 值得保藏

公司组织也是相同的条理化布局

一文看懂数据布局中的树 值得保藏

HTML的文档模子工具 (DOM) 就是一棵树最顶层 HTML 标签毗连到 head 标签和 body 标签。二者又有对应的子标签,好比 head 含有 meta 和 title 标签,body 含有与可视化内容相干的 h1, a, li等标签。名词界说

树(tree):是以边(edge)相连的结点(node)的荟萃,每个结点存储对应的值(value/data),当存在子结点时与之相连。

一文看懂数据布局中的树 值得保藏

根结点(root):是树的首个结点,在相连两结点中更靠近根结点的成为父结点(parent node),响应的另一个结点称为子结点(parent node)。

一文看懂数据布局中的树 值得保藏

边(edge):全部结点都由边相连,用于标识结点间的相关。边是树中很重要的一个观念,由于我们用它来确定节点之间的相关。

一文看懂数据布局中的树 值得保藏

叶子结点(Leaves):是树的结尾结点,他们没有子结点,就像真实的树那样 ,由根开始,舒展枝干,到叶为止。

一文看懂数据布局中的树 值得保藏

树高(height)与结点深度(depth)也是很重要的观念。树高:是由根结点出发,到子结点的最长路径长度。结点深度:是指对应结点到根结点路径长度。

二叉树

此刻来切磋一种非凡的树布局-二叉树(binary tree),它每个节点最多有两个子结点,亦称左孩子和右孩子。

在计较机科学中,二叉树是一种“树”数据布局,树上的每个节点最多有两个孩子,别离为左孩和右孩。——维基百科

来看一个二叉树的实例。

一文看懂数据布局中的树 值得保藏

下手写二叉树

起首明晰我们要实现的工具是一个结点荟萃,每个结点有三个属性:值(value), 左孩子(left_child)和右孩子(right_child)。

写出来会是这个样子:

一文看懂数据布局中的树 值得保藏

我们写了一个BinaryTree类,在初始化现实工具的时辰传入对应值,并在此时还没有子结点的环境下将阁下孩子设为空。

为什么要这么做呢?

由于当我们建设节点的时辰,它还没有孩子,我们只有节点数据。

让我们测试一下:

一文看懂数据布局中的树 值得保藏

下面到了插入结点的操纵:在树还没有对应子结点时新建结点,并赋值给现有结点对应变量。不然,新建结点毗连并替代掉现有位置子结点。

画出来是这个样子:

一文看懂数据布局中的树 值得保藏

响应代码(阁下沟通):

一文看懂数据布局中的树 值得保藏

为了进一步测试,让我们构建一个更伟大一些的树:

一文看懂数据布局中的树 值得保藏

这棵树共有六个结点,个中结点b没有左孩子。对应初始化并插入结点的代码如下:

一文看懂数据布局中的树 值得保藏

下一步让我们看看怎样对树举办遍历。

一样平常来讲我们有两种遍历方法:深度优先遍历(DFS)和 广度优先遍历(BFS),前者沿着特定路径遍历到根结点再转换邻近路径继承遍历,后者逐层遍历整个树布局。来看详细的例子:

深度优先遍历 (DFS)

(编辑:河北网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

热点阅读