Leetcode刷题 Day15----------------二叉树
1. 层序遍历(102)
- 题目链接
- 文章讲解/视频讲解: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 {
List<List<Integer>> list=new ArrayList<List<Integer>>();
public List<List<Integer>> levelOrder(TreeNode root) {
levelOrder1(root);
return list;
}
public void levelOrder1(TreeNode root){
if(root==null) return;
Queue<TreeNode> que=new LinkedList<TreeNode>();
que.offer(root);
while(!que.isEmpty()){
List<Integer> list1=new ArrayList<Integer>();
int size=que.size();
while(size>0){
TreeNode node=que.poll();
list1.add(node.val);
if(node.left!=null) que.offer(node.left);
if(node.right!=null) que.offer(node.right);
size--;
}
list.add(list1);
}
}
}
107.二叉树的层序遍历 II:(给102题最后的结果翻转list就行)
Collections.reverse(list);
199.二叉树的右视图
637.二叉树的层平均值
429.N叉树的层序遍历
515.在每个树行中找最大值
116.填充每个节点的下一个右侧节点指针
117.填充每个节点的下一个右侧节点指针II
104.二叉树的最大深度
111.二叉树的最小深度
2. 翻转二叉树 (优先掌握递归)(226)
- 题目链接:https://leetcode.cn/problems/invert-binary-tree/
- 文章讲解/视频讲解:https://programmercarl.com/0226.%E7%BF%BB%E8%BD%AC%E4%BA%8C%E5%8F%89%E6%A0%91.html
递归方法:
class Solution {
public TreeNode invertTree(TreeNode root) {
if(root==null) return null;
//因为是先前序遍历,所以先进行交换左右孩子节点,然后反转左子树,反转右子树。
swapTreeNode(root);
invertTree(root.left);
invertTree(root.right);
return root;
}
public void swapTreeNode(TreeNode root){
TreeNode temp=root.left;
root.left=root.right;
root.right=temp;
}
}
3. 对称二叉树 (优先掌握递归) (101)
- 题目链接:https://leetcode.cn/problems/symmetric-tree/
- 文章讲解/视频讲解:https://programmercarl.com/0101.%E5%AF%B9%E7%A7%B0%E4%BA%8C%E5%8F%89%E6%A0%91.html
递归方法:
class Solution {
public boolean isSymmetric(TreeNode root) {
return compare(root.left,root.right);
}
public boolean compare(TreeNode left,TreeNode right){
if(left!=null&&right==null) return false;
if(left==null&&right!=null) return false;
if(left==null&&right==null) return true;
if(left.val!=right.val) return false;
boolean inside=compare(left.right,right.left);
boolean outside=compare(left.left,right.right);
return inside&&outside;
}
}