Day 15 第六章 二叉树 part02
- 今日内容:
- 层序遍历 10;● 226.翻转二叉树;● 101.对称二叉树 2
层序遍历
- 看完本篇可以一口气刷十道题,试一试, 层序遍历并不难,大家可以很快刷了十道题。
- 题目链接:
- 视频讲解:https://www.bilibili.com/video/BV1GY4y1u7b2
- 文章讲解:https://programmercarl.com/0102.%E4%BA%8C%E5%8F%89%E6%A0%91%E7%9A%84%E5%B1%82%E5%BA%8F%E9%81%8D%E5%8E%86.html
class Solution {
public List<List<Integer>> resList = new ArrayList<List<Integer>>();
public List<List<Integer>> levelOrder(TreeNode root) {
checkFun02(root);
return resList;
}
public void checkFun01(TreeNode node, Integer deep) {
if (node == null) return;
deep++;
if (resList.size() < deep) {
List<Integer> item = new ArrayList<Integer>();
resList.add(item);
}
resList.get(deep - 1).add(node.val);
checkFun01(node.left, deep);
checkFun01(node.right, deep);
}
public static List<List<Integer>> levelOrder(TreeNode root) {
Queue<TreeNode> queue = new LinkedList<TreeNode>();
List<List<Integer>> result = new ArrayList<List<Integer>>();
if(root == null) return result;
queue.add(root);
while(!queue.isEmpty()){
List<Integer> level = new ArrayList<>();
int levelCount = queue.size();
for(int i = 0; i < levelCount; i ++){
TreeNode node = queue.remove();
if(node.left != null) queue.add(node.left);
if(node.right != null) queue.add(node.right);
level.add(node.val);
}
result.add(level);
}
return result;
}
226.翻转二叉树 (优先掌握递归)
- 这道题目 一些做过的同学 理解的也不够深入,建议大家先看我的视频讲解,无论做过没做过,都会有很大收获。
- 题目链接:https://leetcode.cn/problems/invert-binary-tree/
- 视频讲解:https://www.bilibili.com/video/BV1sP4y1f7q7
- 文章讲解:https://programmercarl.com/0226.%E7%BF%BB%E8%BD%AC%E4%BA%8C%E5%8F%89%E6%A0%91.html
public static TreeNode invertTree(TreeNode root) {
fn(root);
return root;
}
public static void fn(TreeNode node){
if(node == null) return;
TreeNode temp = node.left;
node.left = node.right;
node.right = temp;
fn(node.left);
fn(node.right);
}
101. 对称二叉树 (优先掌握递归)
- 先看视频讲解,会更容易一些。
- 题目链接:https://leetcode.cn/problems/symmetric-tree/
- 视频讲解:https://www.bilibili.com/video/BV1ue4y1Y7Mf
- 文章讲解:https://programmercarl.com/0101.%E5%AF%B9%E7%A7%B0%E4%BA%8C%E5%8F%89%E6%A0%91.html
public boolean isSymmetric(TreeNode root) {
return check(root.left, root.right);
}
public boolean check(TreeNode left, TreeNode right){
if(left == null && right == null) return true;
if(left == null || right == null) return false;
if(left.val != right.val) return false;
return check(left.left, right.right) && check(left.right, right.left);
}