二叉树是什么
二叉树是一种重要的树形结构
n叉树的n是指有最多连接数的节点的连接数
二叉树具有如下性质
- 每个节点的度最多为2 (0 ≤ 实际节点的连接数 ≤ 2)
- 度为0的节点比度为2的节点多一个
证明
: 根据度的定义可知,度为1的节点有一条边,度为2的节点有两条边 令 n 0 为 有 0 条 边 的 节 点 数 、 n 1 为 有 1 条 边 的 节 点 数 、 n 2 为 有 2 条 边 的 节 点 数 ∵ n 个 节 点 的 树 有 n − 1 条 边 ∴ n 0 + n 1 + n 2 = n 1 + 2 n 2 + 1 n 0 = n 2 + 1 令n_0为有0条边的节点数、n_1为有1条边的节点数、 n_2为有2条边的节点数\\ \because n个节点的树有n-1条边 \\ \therefore n_0+n_1+n_2=n_1+2n_2+1 \\ n_0=n_2+1 令n0为有0条边的节点数、n1为有1条边的节点数、n2为有2条边的节点数∵n个节点的树有n−1条边∴n0+n1+n2=n1+2n2+1n0=n2+1
二叉树遍历:
- 前序:根 -> 左 -> 右
- 中序:左 -> 根 -> 右
- 后序:左 -> 右 -> 根
- … (在后续文章中补充)
二叉树的拓展概念
完全二叉树
只有在最后一层的右侧缺少的树
完全二叉树是一个很有意思的也很有用的树形结构,它有一个特点,一个编号为i的节点,其左子编号为: 2 ∗ i 2*i 2∗i,其右子编号为: 2 ∗ i + 1 2*i+1 2∗i+1
根据此性质,我们可以不用通过对象的形式创建节点和建立节点之间的连接,而是可以利用连续空间存储(如数组)
通过这个性质我们可以实现一二维的转换
当然了,从0开始计数的话编号为i的节点的左子编号是 2 ∗ i + 1 2*i+1 2∗i+1,右子编号是 2 ∗ i + 2 2*i+2 2∗i+2,性质没有发生变化,只是做了一下数学上的转换
当然,这种通过计算得到节点和通过记录得到节点的方式没有绝对的好与坏,具体问题具体分析。当需要节省空间的时候我们可以考虑利用计算式的结构存储,当需要节省时间的时候我们可以考虑利用记录式的方式存储
满二叉树
没有度为1的节点的二叉树
完美二叉树
没有度为1的节点同时每一层都满的二叉树
二叉树作用
- 完全二叉树
- 维护集合最值
- 堆
- 优先队列
- 维护集合最值
- 多叉树/森林
- 字符串及相关转换问题
- 字典树
- AC自动机
- 连通性问题
- 并查集
- 字符串及相关转换问题
- 二叉排列树