二叉树的形态
-
根节点:最上面的节点,父节点、子节点、前驱节点
-
相邻的同一个父节点下面的两个孩子节点:兄弟节点、姊妹节点
-
最外层的绿色部分:叶子节点
-
深度指的是最长那根线有几个节点,最长的线有 3 个节点,深度是 3
-
广度指的是某个节点有几根线出去,对于 F 节点有 2 根线出去,广度是 2
-
一般叶子节点为空,广度是 0
-
无向二叉树,不需要考虑入度、出度,只需要考虑广度和深度
二叉树的5种形态
-
结构体指针赋值为空 - - - 空的二叉树
-
只有根节点的二叉树
-
只有左子树的二叉树 - - - 只有左边一支的二叉树
-
只有右子树的二叉树 - - - 只有右边一支的二叉树
-
左右子树都齐全的二叉树 - - - 完全二叉树、满二叉树
满二叉树
-
所有节点当中,只有广度为 0 和 2 的二叉树,所有叶子节点都在同一层上面
-
节点关系可以用等比数列求和去求,知道深度(第几层)可以求最多节点数 1 2 4
-
3 个节点最多有 2 条边,n个节点最多有 n - 1 条边
完全二叉树
-
最后一个节点之前的任何一个节点都是连续的
二叉树的遍历
-
遍历:每一个顶点只打印一次
-
3 个顶点,有 6 种打印方式,一般只研究从左到右(3 种)
-
根据根所在的位置确定是什么打印方式,根在前面:前(先)序遍历;根在中间:中序遍历;根在后面:后序遍历
-
前序遍历:根在前面,根左右
-
中序遍历:左根右
-
后序遍历:根在后面,左右根
-
从上往下,3 个 3 个节点看,A 节点遍历完了(A 节点完整遍历的结果为 ABC),再遍历B节点(B节点也需要完整遍历,结果为 BDE) 把 B 用 BDE 替换,空可以不用写,遍历完左子树后,遍历右子树
-
层次遍历:通过队列实现,一层一层去遍历,A → B、C → D、E、F → G、H
根据两种顺序遍历的结果还原二叉树
-
根据前、中序遍历的结果 或者 根据中、后序遍历的结果还原二叉树
-
后序遍历,最后一个节点一定是根节点;前序遍历,第一个节点一定是根节点
-
知道了根节点是什么,在中序遍历中找根节点的位置,根节点左边的是左子树,根节点右边是右子树,C 在中序遍历的右边,放在右边,中序遍历的 H 在二叉树中的位置结合后序遍历分析,知道在 C 的左边还是右边