树1-概念

前言

树在计算机领域,使用的非常广泛,但是在我们平常开发中,并不会经常自己手写树,因为很多方法都已经被封装实现了,比如map(底层使用的就是树)。但是在一些算法领域(比如acm,算法工程师,大厂及高级职位的面试),树是必须要掌握的一种数据结构。

参考

https://zh.wikipedia.org/wiki/%E6%A0%91_(%E6%95%B0%E6%8D%AE%E7%BB%93%E6%9E%84)

http://data.biancheng.net/tree/

《算法导论》

简介

[自由|无序]树-[自由|无序]树是一个连通的,无环的无向图。

有根树-有根树是一棵自由树,其顶点中存在一个与其他顶点不同的顶点。我们称该不同的顶点为树的根。如下图,这就是一棵树结构,按照定义,类似于生活中真正的树,倒过来的样子,所以最顶端的A的位置,称为根。

  • 结点-树中所有的元素,都称作为结点,包括特殊的叶子结点和根结点
  • 父结点-一个节点的上一级节点称为父结点
  • 子结点-一个节点的下一级结点称为子结点
  • 根结点-一个结点如果没有父结点,被称为根结点,比如上图的A
  • 叶子结点-一个结点如果没有子结点,被称为叶子结点,比如上图的KJLOP
  • 子树-把一个结点下的每一个子结点作为根,又可以看做一棵树,那么以这个结点的子结点为根的树,就是这个结点的子树。比如以B或C为根的树,就是A的子树
  • 结点的度-一个结点拥有的子树个数,称作为这个结点的度。也可以看做是子结点的个数。所以叶子结点还有另外一个定义,就是度为0的节点,就叫做叶子结点。
  • 树的度-一棵树中最大结点的度也称作树的度。树的度在实际操作中没有特别的作用,有些笔试题中会根据这个出题。
  • 层次-根所在的属于第一层,每经过一个结点层加一。一个结点的层,就是从根开始,到达自己唯一一条路径经过的节点个数。
  • 深度-空树的深度是-1。非空树的根是0,每经过一个结点,深度加一。也就是从根到自己唯一路径的长度。深度这个地方就是按照树的数据结构定义的,虽然数据结构中的树被描述为现实中倒立的树,但是在深度的定义上,还是根属于上面,向下属于变深,并没有按照倒立的树定义,从根到树叶属于变高。
  • 高度-一个结点的高度是从这个结点到叶子结点最长路径的长度。叶子结点的高度是0。
  • 树的高度/深度-树的高度和深度是一样的,就是从根结点到叶子结点最长路径的长度。
  • 路径长度-路径长度是两个结点之间边的个数,也就是两个结点之间(算上自己)唯一路径上所有结点数减一
  • 兄弟结点-相同父结点的结点,相互称作兄弟结点。
  • 堂兄弟结点-父结点在同一层的子结点,相互称作兄弟结点
  • 结点的祖先-从根结点到到该结点路径上的所有结点称作该结点的祖先
  • 子孙-以该结点为根的子树下的所有结点都是该结点的子孙
  • 森林-m棵互不相交的树组成的集合称作森林

有序树-有序树是一棵有根树,其中每个孩子的结点是有顺序关系的。

二叉树-每个结点最多含有两个子树

满二叉树-每个结点度为0或2,也就是不存在度为1的结点。每个结点要么是有两个子结点,要么是没有子结点(叶子结点)。如图

完全二叉树-所有叶子结点的深度相同,并且内部结点都是度为2的二叉树。也就是是一棵满二叉树,并且叶子结点处在同一层。如图

对于满二叉树和完全二叉树,还有不同的解释,上面是《算法导论》中的定义。

原文地址:https://www.cnblogs.com/studywithallofyou/p/12742538.html