树(Tree)的基本概念
◼ 节点、根节点、父节点、子节点、兄弟节点
◼ 一棵树可以没有任何节点,称为空树
◼ 一棵树可以只有 1 个节点,也就是只有根节点
◼ 子树、左子树、右子树
◼ 节点的度(degree):子树的个数
◼ 树的度:所有节点度中的最大值
◼ 叶子节点(leaf):度为 0 的节点
◼ 非叶子节点:度不为 0 的节点
◼ 层数(level):根节点在第 1 层,根节点的子节点在第 2 层,以此类推(有些教程也从第 0 层开始计算)
◼ 节点的深度(depth):从根节点到当前节点的唯一路径上的节点总数
◼ 节点的高度(height):从当前节点到最远叶子节点的路径上的节点总数
◼ 树的深度:所有节点深度中的最大值
◼ 树的高度:所有节点高度中的最大值
◼ 树的深度 等于 树的高度
有序树、无序树、森林
◼ 有序树
- 树中任意节点的子节点之间有顺序关系
◼ 无序树
-
树中任意节点的子节点之间没有顺序关系
-
也称为“自由树”
◼ 森林
- 由 m(m ≥ 0)棵互不相交的树组成的结构
二叉树的遍历
◼ 遍历是数据结构中的常见操作
- 把所有元素都访问一遍
◼ 线性数据结构的遍历比较简单
-
正序遍历
-
逆序遍历
◼ 根据节点访问顺序的不同,二叉树的常见遍历方式有4种
-
前序遍历(Preorder Traversal)
-
中序遍历(Inorder Traversal)
-
后序遍历(Postorder Traversal)
-
层序遍历(Level Order Traversal)
前序遍历(Preorder Traversal)
◼ 访问顺序
根节点、前序遍历左子树、前序遍历右子树
中序遍历(Inorder Traversal)
◼ 访问顺序
- 中序遍历左子树、根节点、中序遍历右子树
后序遍历(Postorder Traversal)
◼ 访问顺序
- 后序遍历左子树、后序遍历右子树、根节点
层序遍历(Level Order Traversal)
◼ 访问顺序
- 从上到下、从左到右依次访问每一个节点
遍历的应用
◼ 前序遍历
- 树状结构展示(注意左右子树的顺序)
◼ 中序遍历
- 二叉搜索树的中序遍历按升序或者降序处理节点
◼ 后序遍历
- 适用于一些先子后父的操作
◼ 层序遍历
-
计算二叉树的高度
-
判断一棵树是否为完全二叉树