二叉树理论基础
种类
- 满二叉树 : 每一层都是满的,节点数量2^n - 1
- 完全二叉树 : 除了底层其他层都满,底层从左到右连续
- 堆 : 有序的二叉树,顺序规则分为大顶和小顶(c++ priority_queue就是一个堆)
- 二叉搜索树(BST): 有序的二叉树,左小右大
- 平衡二叉搜索树 :每个左右子树高度差小于等于1的二叉搜索树(红黑树是高度平衡二叉搜索树,c++ map/set/multimap/multiset)
存储方式(做题一般都是链式)
- 链式存储
struct TreeNode {
int val;
TreeNode* left;
TreeNode* right;
TreeNode() : val(0), left(nullptr), right(nullptr) {};
TreeNode(int val) : val(val), left(nullptr), right(nullptr) {};
TreeNode(int val, TreeNode* left, TreeNode* right) : val(0), left(left), right(right) {};
}
- 线式存储
二叉树遍历
- DFS (一般用递归或栈(迭代法)实现)
递归三部曲
-
递归参数和返回值
-
递归出口
-
单层递归逻辑 1
-
前序 从根出发,每个子树中左右,处理中,遍历左,遍历右
-
中序 从根出发,每个子树左中右, 遍历左,处理中,遍历右
-
后序 从根出发,每个子树左右中,遍历左,遍历右,处理中
-
BFS (一班用队列视线) 层序