题目 思路 备注
    二叉树的最大深度 递归,三行代码即可
    验证二叉搜索树 递归,几行代码即可
    对称二叉树 递归 左子树的左节点==右子树的右节点 && 左子树的右节点 ==右子树的左节点
    二叉树的层序遍历 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; iNode cur = queue.poll(); if(pre!=null) pre.next = cur; //前一个节点指向当前节点
    //…cur的左右子节点入队
    pre = cur; //当前节点作为上一个节点,继续循环
    }
    二叉搜索树中第K小的元素 中序遍历(左根右),直接取值第K个值 注:二叉搜索树是一棵左小右大树
    二叉树的最近公共祖先 后序遍历, 如果分布于左右子树,则结果是根;如果分布于左子树,则是左边最先找到的那个;如果分布于右子树,则是右边最先找到的那个,否则是null image.png
    二叉树中的最大路径和 后续遍历,计算左子树的路径和、右子树的路径和、根的路径和,返回Max(根、左-根、右-根),同时更新全局最大和:Max(根、左-根、右-根、左、右、左-根-右) image.png