| 题目 | 思路 | 备注 |
|---|---|---|
| 二叉树的最大深度 | 递归,三行代码即可 | |
| 验证二叉搜索树 | 递归,几行代码即可 | |
| 对称二叉树 | 递归 | 左子树的左节点==右子树的右节点 && 左子树的右节点 ==右子树的左节点 |
| 二叉树的层序遍历 | bfs | 使用队列进行BFS遍历即可 |
| 二叉树的中序遍历 | 递归 | 递归左 —> 访问中 —> 递归右 |
| 二叉树的锯齿形层次遍历 | 仍按正常的bfs层序遍历,只不过在访问子节点值时,将访问过的值保存到结果头部还是尾部而已 | 先从左往右,再从右往左进行下一层遍历,以此类推,层与层之间交替进行: inttargetIdx = left2Right ?inner.size() :0; |
| 将有序数组转换为二叉搜索树 | 折半 & 递归 | 取中间节点作为根节点,递归转换左半区间,再递归转换右半区间 |
| 从前序与中序遍历构造二叉树 | 递归建树: 1. 取前序第一节点构建根节点 1. 根据根节点值在中序中找到根节点位置 1. 计算出新的前序子数组位置和中序索引位置 1. 递归构建左子树和右子树 |
递归方法: fromPreIdx 与 toPreIdx 用于确定当前前序数组的区间 fromInIdx用于确定当前中序数组中根的位置 TreeNode build(int[] preorder, int fromPreIdx, int toPreIdx, int[] inorder, int fromInIdx); |
| 填充每个节点的下一个右侧节点指针 | 就是层序遍历,记录上次访问的节点,上次访问节点的next指向当前节点即可。 | 关键代码: Node pre = null; for(inti=0; i //…cur的左右子节点入队 pre = cur; //当前节点作为上一个节点,继续循环 } |
| 二叉搜索树中第K小的元素 | 中序遍历(左根右),直接取值第K个值 | 注:二叉搜索树是一棵左小右大树 |
| 二叉树的最近公共祖先 | 后序遍历, 如果分布于左右子树,则结果是根;如果分布于左子树,则是左边最先找到的那个;如果分布于右子树,则是右边最先找到的那个,否则是null | ![]() |
| 二叉树中的最大路径和 | 后续遍历,计算左子树的路径和、右子树的路径和、根的路径和,返回Max(根、左-根、右-根),同时更新全局最大和:Max(根、左-根、右-根、左、右、左-根-右) | ![]() |


