树的定义:
我们简单一点,像下面这个结构的数据结构就是树。我们最上面那个叫做根节点。同时,它的每一个分支是没有关联的,看出来了吧。根节点前面没有节点,就是没有前驱节点。除了根节点的其他节点只有一个前驱节点。
结点的家族关系:
祖先结点:比如这里的G这个节点,从A到G这条线上的所有节点,除了G自己以外的都能叫做G的祖先节点。
子孙结点:反过来想一下,A节点下面所有的节点都是它的子孙节点
双亲结点:类比我们生活中的关系,双亲自然就是爸妈的关系,所以一定是离这个节点最近的祖先节点。比如D它的双亲是B
孩子结点:是双亲节点的反过来,比如H是D的孩子节点:
兄弟结点:比如D下面有三个孩子,那么它们互为兄弟节点
另外的堂兄妹啥的,类比我们生活中的家族关系即可。。。
名词定义:
节点的度:一个树中子节点的数就是这个节点的度。简单一点,凡是一个节点分出几个叉,那他的度就是几。
树的度:整个树中,度数最大的那个节点的度就是整个这颗树的度
分支结点:度>0的结点就是分支节点
叶子结点:度为0的结点就是叶子结点,我们类比一下生活中的树木,他们的叶子是不是没有办法再分叉了?
结点的层次:我们通俗一点,一棵树有从上往下有几行就有几层,根节点开始的是第一层。
结点的深度:我们说水深的时候是从上往下的看,这里是一样的。从根节点开始看,结点在多少层就说深度是多少
结点的高度:高度我们都是从下往上的,所以从叶子结点开始从下往上数层数。有多少就是多少。
树的高度(深度):为什么放在一起说?因为他们的数量关系是完全一致的。简单来讲,整个树有多少层,他的高度就是多少。
有序树:我们对数的结点这样规定,从上往下,从左往右的顺序不改变,结点不能随便交换,这样的就是有序树。
无序树:不是有序树,那就是无需树呗。
路径长度:路径长度千万注意了,他不是说的两个结点间的结点个数,而是说的两个结点间边的个数,比如上面A到J,他的路径长度为3,记住一定是边的个数
森林:森林,我们类比现实中的森林,他就是由很多个树组成的就是森林呗
我们记住,任何人类的数据结构,都是通过现实中的事物得来的灵感,
树的性质:4个
注意点:这里的m叉树说的是,每个结点最多能有的孩子结点的个数
树的存储结构:
顺序存储结构:
双亲表示法:用一组连续的存储空间存储树的结点,同时在每个节点中,用一个变量存储这个结点的双亲结点在数组中的位置
具体的表示方法如下图:记住,我们这里仍然使用数组来存储。
链式存储结构:
结构一:孩子表示法:
存储结构如图所示:
结构二:孩子兄弟表示法:
存储结构如下图:左边的结构中,第一个格子存放本结点数据,第二个格子存放指向这个结点的左孩子(第一个孩子)的指针,第三个格子存放指向这个结点的右兄弟结点的指针。