【数据结构】树的基本概念 | 入门树以及二叉树必熟知

的学习过程中,二叉树比较重要,但是在学习二叉树之前,得先需要了解到一些数的概念。

树的定义

是一种非线性的数据结构,它是由 n(n >= 0)个有限结点组成一个具有层次关系的集合。把它叫做树是因为它看起来像是一棵倒挂的树,也就是说,就是一个根朝上,叶朝下的数。

树的性质

有一个特殊的结点,称为根结点,根结点没有前驱结点

除根结点外,其余结点被分成M个互不相交的集合T1、T2、......、Tm,其中每一个集合Ti(1 <= i <= m)又是一棵结构与树类似的子树。每棵子树的根结点有且只有一个前驱可以有0个或多个后继

树是递归定义

  • 任何一棵树,都可以被拆成一个根和n(n >= 0)棵子树组成。所以树一定会被归类为递归问题解决。那树的递归问题的返回条件就是,当遇到叶子的时候没有子树了,那么就开始返回。

那么什么是非线性的呢?

  • 简单点来说就是非线性就是逻辑结构上不是线性的,在逻辑结构上不是一个挨着一个,逻辑结构上就是一个倒挂的树。

我们首先要清楚的是数据元素间的相互关系具体应包括3个方面:

  • 数据的逻辑结构;
  • 数据的存储结构;
  • 数据的运算集合。

逻辑结构和物理结构:

  • 逻辑结构就是我们想象出来的;
  • 物理结构是在内存中实在存储结构

而在之前我们所学习的线性表、栈、对、字符串、数组以及广义表都属于线性结构。

这里我们注意一下,数组型结构物理结构与逻辑结构是一致的,在逻辑结构中数组存储是连续的,在物理结构中也是连续的。

但是链表就与数组不同。我们在平时画图的过程中,链表中具有箭头并且每个箭头指向下一个,依次往后,但是在实践中,可能并不是如此的。这些结构都是来自堆上面的。线性表在逻辑结构是连续的,通过每一个箭头,上一个指向下一个,但是在实际过程中并没有箭头,就是上一个存储下一个的地址。

【数据结构】树的基本概念 | 入门树以及二叉树必熟知_第1张图片

树的相关概念

  • 链表中的节点都是有一个或者固定的指针,例如指向下一个节点的指针
  • 双向链表中,就是有指向前驱指针以及指向后继指针
  • 而在一个节点则是会有很多的指针,指向孩子们。

结点的度

结点的度:一个节点含有的子树的个数称为该结点的度;如A节点的度为6,B节点的度为0。

叶节点或终端结点

叶节点或终端结点:度为0的节点称为叶节点;如上图P/Q/H/I/B/C...等都为叶节点。 

非终端节点或分支节点

非终端节点或分支节点:度不为0的结点;如上图D/E/F/G/J都为非终端节点。

所以一个数可以看做是根、分支节点和叶节点的组合。

双亲节点或父节点

双亲节点或父节点:若一个节点含有子节点,则这个节点称为其子节点的父节点;如上图:A是B的父节点。

孩子节点或子节点

孩子节点或子节点:一个节点含有子树的根结点则称为该结点的子节点;如上图:B是A的孩子节点。

一个节点可能即是父节点又是子节点。

在这里,有些地方会叫做“双亲节点”。这里并不是有两个父节点,它仍然只有一个父亲,而是为了歧义译为“父母双亲”。

兄弟节点

兄弟节点:具有相同父节点的结点互称为兄弟节点;如上图:B、C是兄弟节点(亲兄弟)。

树的度

树的度:一棵树中,每个结点有个度,最大节点的度称为树的度;如上图:树的度为6。

树的层次

树的层次:从根开始定义起,根为第一层,根的子节点为第2层,以此类推;

树的高度或深度

树的高度或深度:树中节点的最大层次;如上图:层次为4;

数组的下标是从0开始的。

那么高度和深度是从0开始还是1开始?

  • 树的层次,并没有细致的规定,但是建议使用从1开始。

数组下标为什么从0开始呢?

  • 为了方便计算,a[ i ]等价于*( a + i )。

数组与指针的关系是什么?

  • 数组名是首元素的地址。a[ i ]等价于*( a + i ) 。

那么为什么树建议从1开始而不是从0开始呢?

【数据结构】树的基本概念 | 入门树以及二叉树必熟知_第2张图片

堂兄弟节点

堂兄弟节点:双亲在同一层的节点互为堂兄弟;如上图:H、I互为兄弟节点。

节点的祖先

节点的祖先:从根到该节点所经分支上的所有节点;如上图:A是所有节点的祖先。

子孙

子孙:以某节点为根的子树中任一节点都称为该节点的子孙。如上图:所有节点都是A的子孙。

森林

森林:有m ( m > 0 ) 棵互不相交的树的集合称为森林;(在以后学习的并查集就是属于森林)。

树,简而言之就是数的概念+人类亲缘关系而进行描述的。

树与非树

【数据结构】树的基本概念 | 入门树以及二叉树必熟知_第3张图片

树注意:

  • 子树之间不能相交的;
  • 除了根节点外,每个结点有且只有一个父节点;
  • 一棵N个结点的树有N-1条边。

树形结构中,子树之间是不能有交集的,否则就不是树形结构。

你可能感兴趣的:(数据结构,学习资源,数据结构,算法)