二叉树糕手

二叉树性质

节点数与高度的关系:高度为 h 的二叉树,最少有 h 个节点(每层仅 1 个节点,斜树),最多有 2^h - 1 个节点(满二叉树,每层节点数全满)。

度的特性:节点的「度」是指其子节点个数(0 = 叶节点,1 = 单子女节点,2 = 双子女节点);任意二叉树中,「度为 0 的节点数(叶节点)= 度为 2 的节点数 + 1」

  • n = n_{0} + n_{1} + n_{2},很好理解,只可能有度为1,2,3的节点,加一块就是总结点。
  • n = n_{1} + 2n_{2} + 1,除了根节点都是子节点,从上向下按孩子算,这个1是根节点。 总结点数= 度数 + 1.

联立可得n_{0} = n_{2} + 1,叶节点 = 2度 + 1

递归特性:二叉树的左、右子树仍是二叉树,因此多数操作(遍历、查找)可通过递归实现。

        二叉树很像二进制数,二叉树第一层有节点数1 = 2^{0},第二层是2 = 2^{1},第三层4 = 2^{2},以此类推,第 i 层有2^{i-1}个节点,一共有h层满二叉树层数(深度)从1开始)形成这么一个等比数列,\frac{a_{1} * (1 -q^{h})}{1 - q}=2^{h} - 1,树的二进制每位都是1,111b + 1 = 1000b。

        有n个节点的满二叉树,深度h = 层度 = log_{2}(n + 1).

        对于完全二叉树(最后一次不满但是左对齐),h = 层数 = log_{2}(n + 1)向上取整

        完全二叉树可以由节点数n反向推出n_{0}n_{1} n_{2},因为n_{0} = n_{2} + 1n = n_{1} + 2n_{2} + 1,所以n_{0} + n_{2} = 2n_{2} + 1一定是奇数,而对于完全二叉树,度数为1的节点至多存在一个,如果总节点数n是偶数,则n_{1} = 1,否则 n_{1} = 0。

二叉树的存储结构

顺序存储

二叉树的顺序存储只适合完全二叉树

如果不是完全二叉树,为了方便的找到左右孩子和父节点,数组中有很多空位,浪费空间

最坏的情况:

链式存储

如果需要方便的找到父节点,还可以加一个父节点指针。

二叉树的遍历

二叉树的遍历是栈式的深度优先搜索。

二叉树的层序遍历是队列式的广度优先搜索。

posted @ 2025-11-24 15:50  mc12356  阅读(27)  评论(0)    收藏  举报  来源