树(Tree)的基本概念
节点、根节点、父节点、子节点、兄弟节点;节点、根节点、父节点、子节点、兄弟节点;
- 一棵树可以没有任何节点,称为空树
- 一棵树可以只有 1 个节点,也就是只有根节点
子树、左子树、右子树;
节点的度(degree):子树的个数;
树的度:所有节点度中的最大值;
叶子节点(leaf):度为 0 的节点;
非叶子节点:度不为 0 的节点;
层数(level):根节点在第 1 层,根节点的子节点在第 2 层,以此类推(有些教程也从第 0 层开始计算)
节点的深度(depth):从根节点到当前节点的唯一路径上的节点总数;
节点的高度(height):从当前节点到最远叶子节点的路径上的节点总数;
树的深度:所有节点深度中的最大值;
树的高度:所有节点高度中的最大值;
数的深度 等于 树的高度;
**其中有有序树 无序树 森林 二叉树 :真二叉树 满二叉树 完全二叉树 **
设二叉树的度为0 度为1 度为2的节点的数量分别为n1 n2 n0;总节点的数量为n
n=n1+n2+n0;
n-1=n1+2n2;
n0=n2+1;
对于二叉树的高度height
假设满二叉树的高度为 h( h ≥ 1 ),那么
- 第 i 层的节点数量: 2i−1
- 叶子节点数量: 2h−1
- 总节点数量 n
- n = 2h − 1 = 20 + 21 + 22 + ⋯ + 2h−1
- 树高度与总节点的关系:h = log2(n + 1)
遍历是数据结构中的常见操作:把所有元素都访问一遍;
线性数据结构的遍历比较简单:
正序遍历
逆序遍历
根据节点访问顺序的不同,二叉树的常见遍历方式有 4 种:
前三种方法调用递归 第四种只能迭代
前序遍历(Preorder Traversal)中左右
中序遍历(Inorder Traversal) 左中右 从大到小或者从小到大的遍历
后序遍历(Postorder Traversal)左右中
层序遍历(Level Order Traversal)一层一层的遍历