| 题目 | 思路 |
|---|---|
| 144. 二叉树的前序遍历 | 1. 递归 2. 栈 |
| 94. 二叉树的中序遍历 | 1. 递归 2. 栈(先迭代到左边的叶子结点) |
| 145. 二叉树的后序遍历 | 1. 递归 2. 栈 |
| 104. 二叉树的最大深度 | 1. 递归 2. 利用队列层序遍历 |
| 559. N 叉树的最大深度 | 思路类似104 |
| 617. 合并二叉树 | 递归建树 |
| 226. 翻转二叉树 | 递归互换左右子树 |
| 101. 对称二叉树 | 1. 递归,判断左右子树是否符合条件 2. 迭代,判断左右子节点是否符合条件 |
| 543. 二叉树的直径 | 左右子树的最大深度相加就是最大路径 |
| 662. 二叉树最大宽度 | 对节点编号 |
| 102. 二叉树的层序遍历 | 队列 |
| 637. 二叉树的层平均值 | 队列 |
| 二叉树子树平均值最大 | 递归 |
| 108. 将有序数组转换为二叉搜索树 | 建树时注意终止条件 |
| 98. 验证二叉搜索树 | 二叉搜索树需要考虑中序遍历 |
| 230. 二叉搜索树中第K小的元素 | 中序遍历 |
| LCR 174. 寻找二叉搜索树中的目标节点 | 中序遍历 |
| 199. 二叉树的右视图 | 层序遍历 |
| 114. 二叉树展开为链表 | 先将遍历节点存数组,然后改变指针指向 |
| 106. 从中序与后序遍历序列构造二叉树 | 确定根的位置,依次划分中序数组和后序数组 |
| 112. 路径总和 | 递归函数是否有返回值得看是否需要处理返回值 |
| 113. 路径总和 II | 递归函数是否有返回值得看是否需要处理返回值 |
| 437. 路径总和 III | dfs1确定根节点,dfs2计算路径和 |
| LCR 153. 二叉树中和为目标值的路径 | 和113一样 |
| 124. 二叉树中的最大路径和 | dfs |
| 236. 二叉树的最近公共祖先 | 左子树和右子树是否含有p或者q |
| 987. 二叉树的垂序遍历 | dfs + 排序 |
| 513. 找树左下角的值 | 层序遍历 |
| 450. 删除二叉搜索树中的节点 | 删除过程其实就当前节点建树的过程,考虑三种情况的返回值 |
| 103. 二叉树的锯齿形层序遍历 | 就是层序遍历 |
| 449. 序列化和反序列化二叉搜索树 | 前序遍历建树,根据二叉搜索树的性质划分区间 |
| 110. 平衡二叉树 | 求深度 |
| 100. 相同的树 | 递归判断 |
| 572. 另一棵树的子树 | 递归判断 |
| 114. 二叉树展开为链表 | 节点先存储再重构 |
| LCR 155. 将二叉搜索树转化为排序的双向链表 | 中序遍历直接修改指针 |
| 958. 二叉树的完全性检验 | 队列 + 错误情况判断 |