目录
题目1: 102. 二叉树的层序遍历
- 题目链接:102. 二叉树的层序遍历
1- 思路
- 二叉树的层序遍历需要借助 队列 来实现
- 主要思路:先往队列中 offer 当前结点,若其左右孩子都不为 null 则加入到队列中
2- 题解
⭐二叉树的层序遍历 ——题解思路
class Solution {
List<List<Integer>> res = new ArrayList<>();
public List<List<Integer>> levelOrder(TreeNode root) {
if(root==null){
return res;
}
Queue<TreeNode> queue = new LinkedList<>();
queue.offer(root);
while(!queue.isEmpty()){
int len = queue.size();
List<Integer> path = new ArrayList<>();
while(len>0){
TreeNode node = queue.poll();
path.add(node.val);
if(node.left!=null){
queue.offer(node.left);
}
if(node.right!=null){
queue.offer(node.right);
}
len--;
}
res.add(new ArrayList(path));
}
return res;
}
}
题目2: 226.翻转二叉树
- 题目链接:226. 翻转二叉树
1- 思路
- 采用层序遍历的方式,层序遍历到的结点 交换当前结点的左右孩子 即可实现二叉树的翻转
2- 题解
⭐翻转二叉树 ——题解思路
class Solution {
public TreeNode invertTree(TreeNode root) {
if(root==null){
return null;
}
Queue<TreeNode> queue = new LinkedList<>();
queue.offer(root);
while(!queue.isEmpty()){
int len = queue.size();
while(len>0){
TreeNode nowNode = queue.poll();
swap(nowNode);
if(nowNode.left!=null) queue.offer(nowNode.left);
if(nowNode.right!=null) queue.offer(nowNode.right);
len--;
}
}
return root;
}
private void swap(TreeNode root){
TreeNode tmp = root.left;
root.left = root.right;
root.right = tmp;
}
}
题目3: 101. 对称二叉树
- 题目链接:101. 对称二叉树
1- 思路
- 借助 队列 的方式来实现
- 每次 入队 && 出队两个元素,对当前的两个元素比较判断是否满足条件
四种判断情况
- ①
if(l==null && r==null)
则continue
- ② 左空,右不空,返回false
- ③ 右空,左不空,返回false
- ④ 左右值不相等,返回false
2- 题解
⭐对称二叉树 ——题解思路
class Solution {
public boolean isSymmetric(TreeNode root) {
Queue<TreeNode> queue = new LinkedList<>();
queue.offer(root.left);
queue.offer(root.right);
while(!queue.isEmpty()){
TreeNode l = queue.poll();
TreeNode r = queue.poll();
if(l==null && r==null){
continue;
}
if(l == null && r!=null){
return false;
}
if(l!=null && r == null){
return false;
}
if(l.val!=r.val){
return false;
}
queue.offer(l.left);
queue.offer(r.right);
queue.offer(l.right);
queue.offer(r.left);
}
return true;
}
}