18天算法基础系列课(六)二叉树

216 阅读2分钟

树(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)

◼ 访问顺序

  • 从上到下、从左到右依次访问每一个节点

遍历的应用

◼ 前序遍历

  • 树状结构展示(注意左右子树的顺序)

◼ 中序遍历

  • 二叉搜索树的中序遍历按升序或者降序处理节点

◼ 后序遍历

  • 适用于一些先子后父的操作

◼ 层序遍历

  • 计算二叉树的高度

  • 判断一棵树是否为完全二叉树