【C# 数据结构与算法】树


学习路径

然后去leetcode刷简单的题目。

然后去leetcode刷简单的题目。

复习所有 在刷leetcode难部分

树的定义

树可以用递归的形式来定义:树T是由n(n>=0)个结点组成的有限集合,他或者是颗空树,或者包含一个根结点和零或若干棵互不相干的子树。

可以使用广义表(纯表)的形式树结构,如下树结构用广义表表示:A(B(E,F),C(G),D(H,I,J))

 表示树结构的广义表没有共享和递归成分,是一种纯表。广义表中的原子对应于树的叶节点,树的非叶子结点则用子表结构表示。

空树:节点树为0的树,即n=0时,称为空树。

非空树:一颗非空树T具有以下特点

            (1)有且仅有一个根节点

              (2)没有后继的节点称为“叶子节点”,有后继的节点称为“分子节点”.

              (3)当树的结点数n>1时,根结点之外的其他结点可以分为m(m>=1)个互不相交的集合T1,T2,T3.。。。Tm,其中每个集合Ti(1<=i<=m)具有与树T相同的树结构,称为子树。每颗子树的根结点有且仅有一个直接的前驱结点。

                            这是图

树的分类:

树结构可以分为有序和无序树两种类型,有序树种最常用的是二叉树。

树结构的应用场景:

操作系统的文件系统,根目录是文件树的根节点,子目录是树中的分子节点,文件是树结构的叶子节点。

除了根节点外,任何节点有且仅有一个前驱,有多个前驱的节点的叫图。叶子节点没用后继节点。

森林

若干颗互不相交的树的集合称为森林。给森林加上一个根节点就变成一颗树。将树的根结点删除就变成由子树组成的森林。

 C# 节点的深度是从0开始计算的。

 树类型概述:

二叉树,完全二叉树,满二叉树,二叉排序树,平衡二叉树,红黑树,B树,B+树,B*树、2-3-4树、2-3树

 平衡二叉树开始涉及到旋转。

操作

二叉树常用操作旋转(rotate),该操作为常数时间复杂度。 二叉树旋转前后,中序遍历的结果不变。因此树的任何部分旋转,对整棵树的元素顺序没有影响。

在哈夫曼树中用到。