学习目标:
- 102.二叉树的层序遍历
- 226.翻转二叉树
- 101.对称二叉树
学习内容:
102.二叉树的层序遍历
题目链接&&文章讲解
给你二叉树的根节点 root ,返回其节点值的层序遍历,即逐层地,从左到右访问所有节点。
class Solution {
public List<List<Integer>> levelOrder(TreeNode root) {
List<List<Integer>> res = new ArrayList<>();
//借助队列
Queue<TreeNode> que = new LinkedList<>();
if(root != null) que.offer(root);
while(!que.isEmpty()){
//记录每层要遍历的节点数量
int size = que.size();
List<Integer> list = new ArrayList<>();
//弹出节点 并把其左右孩子加入队列
while(size-- > 0){
TreeNode node = que.poll();
list.add(node.val);
if(node.left != null) que.offer(node.left);
if(node.right != null) que.offer(node.right);
}
res.add(list);
}
return res;
}
}
226.翻转二叉树
题目链接&&文章讲解
给你一棵二叉树的根节点 root ,翻转这棵二叉树,并返回其根节点。
//前序遍历
class Solution {
//返回值:TreeNode 参数:node
//终止条件:节点为空
//处理逻辑:交换节点的左右孩子
public TreeNode invertTree(TreeNode root) {
if(root == null) return root;
TreeNode temp = root.left;
root.left = root.right;
root.right = temp;
invertTree(root.left);
invertTree(root.right);
return root;
}
}
//中序遍历
class Solution {
//返回值:TreeNode 参数:node
//终止条件:节点为空
//处理逻辑:交换节点的左右孩子
public TreeNode invertTree(TreeNode root) {
if(root == null) return root;
invertTree(root.left);
TreeNode temp = root.left;
root.left = root.right;
root.right = temp;
//继续遍历左子树
invertTree(root.left);
return root;
}
}
101.对称二叉树
给你一个二叉树的根节点 root , 检查它是否轴对称。
class Solution {
//返回值:boolean 参数:left、right
public boolean compare(TreeNode left, TreeNode right) {
//确定终止条件
if(left == null && right == null) return true;
else if(left !=null && right == null) return false;
else if(left == null && right != null) return false;
else if(left.val != right.val) return false;
//处理逻辑
boolean in = compare(left.left,right.right); //左
boolean out = compare(left.right,right.left);//右
//后序遍历:左右中 把左右孩子的信息返回给根节点
boolean res = in && out;//中
return res;
}
public boolean isSymmetric(TreeNode root) {
return compare(root.left,root.right);
}
}