一文讲透数据结构中的树,建议收藏!
数据结构是 10 年前大学里学的一门课程,也是我北漂唯一携带的一本书。幸运的是,书还没有被孩子给撕碎。 为了让大家都能够搞懂「树」这个苦涩而硬核的知识,今天就重拾记忆,分享一下研发人员心中那些放不下的「树」。 不过,一定要冲好咖啡、沏壶好茶,心平气和去看文。 01. 「树」现实与虚拟的抽象 在「中华姓氏树」中寻找一片属于你的叶子,探寻一下家族的来源。 在脑海里尝试画一下「家谱树」。 看完现实中的树,那来看一看计算机的文件系统组织形式。 无论是现实的姓氏树、家谱树,还是计算机的文件系统,表现形式虽然不同,但是本质上却都是树。 那到底什么是树呢? 树是由 n(n≥0)个结点组成的有限集合。 当 n = 0 时,称为空树; 当 n > 0 时,有一个特殊的节点称为根结点(root),它没有前驱结点;其它结点分为 m 棵互不相交的子树。 如图示意,(a)为空树;(b)为 1 个结点的树;(c)为 n 个结点的树。 知道了什么是树,上面「家谱树」以及「文件系统」用到的树表示法,有没有学名呢?稍微科普一下。 图示法:是树的直观表示法,主要用于描述树的逻辑结构,如上面提到的家谱树。 横向凹入表示法:是用逐层缩进方法表示结点之间的层次关系,主要用于树的屏幕显示和打印输出,如上面提到的文件系统。 知道了什么树以及树的部分表示法,但是猿有猿声,鸟有鸟语,树也有术语。 02.「树」有术语 节点 or