Python微信订餐小程序课程视频
https://edu.csdn.net/course/detail/36074
Python实战量化交易理财系统
https://edu.csdn.net/course/detail/35475
1树的定义及相关术语
1.1 树的定义
- 树是一种非线性的数据结构,由n(n>=0)个结点组成的有限集合;
- 如果n=0,称为空树;
- 如果n>0,则:
- 有一个特定的结点被称之为根结点(root),根结点只有直接后继,没有前驱;
- 除根结点外的其他结点划分为m(m>=0)个互不相交的有限集合T0,T1…Tm-1,每一个集合又是一颗子树,并称之为根的子树。
1.2 树的特点
- 每个结点有零个或多个子结点;
- 没有父结点的结点称为根结点;每一个非根结点有且只有一个父结点;除了根结点外,每个子结点可以分为多个不相交的子树;
- 节点的数量等于边数加一;树由n 个节点 和 (n-1)条边 构成,其中n ≥ 1;
- 树或栈这种数据结构用于解决** 具有完全包含关系的问题**;
- 问题抽象(思维逻辑):本质上是把一个大问题分成若干个小问题,当小问题解决了,大问题自然也解决了;首先,将树中的“节点”看作“集合”,“边”看作“关系”,接着把“全集”看成是一个大问题,而“子集”看作是若干个小问题,我们只需要关注小问题的求解即可。
1.3 树的相关术语
- 节点深度:对任意节点x,x节点的深度表示为根节点到x节点的路径长度。所以根节点深度为0,第二层节点深度为1,以此类推;
- 节点高度:对任意节点x,叶子节点到x节点的路径长度就是节点x的高度;
- 树的深度(高度):一棵树中节点的最大深度就是树的深度,也称为树的高度;
- 度:节点的子树数目就是节点的度;
- 叶子节点 vs 分支节点:度为零的节点就是叶子节点(路径中的最后一个节点);度不为零的节点就是分支节点;
- 父节点:若一个节点含有子节点,则这个节点称为其子节点的父节点;
- 子节点:一个节点含有的子树的根节点称为该节点的子节点;
- 兄弟节点:拥有共同父节点的节点互称为兄弟节点;
- 节点的层次:从根节点开始,根节点为第一层,根的子节点为第二层,以此类推;
- 祖先:对任意节点x,从根节点到节点x的所有节点都是x的祖先(节点x也是自己的祖先)
- 后代:对任意节点x,从节点x到叶子节点的所有节点都是x的后代(节点x也是自己的后代)
- 森林:m颗互不相交的树构成的集合就是森林
- n叉树:由一个节点向外最多引出节点的数量,即当前这个节点最多向外有n个指向;
- 补充:度分为“入度”和“出度”;
- 出度:由一个节点向外指向边的数量;
- 入度:有多少条边指向一个节点的数量;树的入度为1,所以只考虑出度,即为度;
- 案例:
- 树的深度(高度):4,path = 1→4→6→8
- 节点4的深度:2,path = 1→4;节点4的高度:3,path = 8→6→4
- 节点2的度:1, =(5, );节点4的度:2,=(6, 7);叶子节点的度:0
2 二叉树
2.1 定义
- 在一个树中,由一个节点向外最多引出2个节点,即当前这个节点最多向外有2个指向;
2.2 n叉树 vs 二叉树
如何定义n叉树,n是多少的问题?
- 对于n叉树中的n是一个不确定性的问题,一般计算机只能处理确定性问题,所以,我们可以将n 叉树转换为2叉树来思考;
- 由于计算机底层是基于二进制计算的,故2 叉树 与 n叉树之间可以相互转换; <