二叉树:
-
数据结构:
- 满二叉树:
- 只有度为0和度为2的节点,而且度为0的在同一层;
- 深度:k,对应节点:2^k - 1【深度从1开始】;
- 完全二叉树
- 除了最底层可能没有填满,其余都达到最大值;
- 最底层也是从左边向右集中,可能包含1 - 2^(k - 1)个节点;
- 搜索树:
- 分别对左右子树的大小有限制;
- 当作一个有序数组处理;
- 平衡二叉搜索树:
- 对高度有限制,高度差不超过1;
- 存储方式:
- 链表【指针,左右指针】
- 顺序存储【堆,数组】;
- 遍历方式:
- 深度优先遍历【前、中、后序遍历,借助栈【递归】】
- 广度优先遍历【层遍历【空指针标记法】,借助队列【先进先出】】
- 满二叉树:
-
经典题型:
-
递归算法:
- 递归的参数和返回值;
- 终止条件;
- 单层递归的逻辑;
-
根据二叉树的属性
- 对称性
- 最大、最小深度
- 由上到下【前序遍历,由集中走向分支】
- 由下到上【后序遍历,由分支走向集中】
- 是否平衡【通过高度差】;
- 节点数量
- 找所有路径
- 左叶子之和【关键点在条件】
- 左下角的值【由最大深度 + 左叶子】
- 路径总和;
-
二叉树的修改和构造:
- 构造、翻转、合并二叉树
-
二叉搜索树的属性【当作有序数组处理 or 一般二叉树】
-
二叉搜索树的修改:
- 构造、插入、删除、修建
-
总结:
- 二叉树的构造,都是前序遍历【从集中到分支】,先构造中间节点;
- 普通二叉树的属性,都是后序遍历【从分支到集中】,使用返回值做计算;
- 二叉搜索树的属性,使用中序【不然白瞎了有序性】;
-