JAVA二刷-Day15 | 层序遍历*10, 226.翻转二叉树, 101.对称二叉树
发布人:shili8
发布时间:2025-03-12 18:45
阅读次数:0
**JAVA二刷-Day15**
今天我们将学习三道经典的二叉树问题:层序遍历、翻转二叉树和对称二叉树。
###1. 层序遍历(BFS)
####问题描述:
给定一个二叉树,输出其每一层的节点值。
#### 示例:
输入:[3,9,20,null,null,15,7]
输出:
[
[3],
[9,20],
[15,7]
]
#### 解决方案:
我们可以使用队列来实现层序遍历。首先,入队根节点,然后开始循环直到队列为空。
javaimport java.util.*;
public class Solution {
public List> levelOrder(TreeNode root) {
if (root == null) return new ArrayList<>();
List> result = new ArrayList<>();
Queue queue = new LinkedList<>();
queue.offer(root);
while (!queue.isEmpty()) {
int size = queue.size();
List level = new ArrayList<>();
for (int i =0; i < size; i++) {
TreeNode node = queue.poll();
level.add(node.val);
if (node.left != null) queue.offer(node.left);
if (node.right != null) queue.offer(node.right);
}
result.add(level);
}
return result;
}
}
###2. 翻转二叉树####问题描述:
给定一个二叉树,翻转该树,使得每个节点的左子树成为右子树,反之亦然。
#### 示例:
输入:[4,2,7,1,3,6,9]
输出:[4,7,2,9,3,6,1]
#### 解决方案:
我们可以使用递归来实现翻转二叉树。首先,定义一个函数来交换两个节点的值,然后再递归地交换每个节点的左子树和右子树。
javapublic class Solution {
public TreeNode invertTree(TreeNode root) {
if (root == null) return null;
// 交换当前节点的值 int temp = root.val;
root.val = root.right.val;
root.right.val = temp;
// 递归地交换左子树和右子树 root.left = invertTree(root.left);
root.right = invertTree(root.right);
return root;
}
}
###3. 对称二叉树####问题描述:
给定一个二叉树,判断该树是否是对称的。
#### 示例:
输入:[1,2,2,3,4,4,3]
输出:true#### 解决方案:
我们可以使用递归来实现对称性检查。首先,定义一个函数来比较两个节点的值,然后再递归地比较每个节点的左子树和右子树。
javapublic class Solution {
public boolean isSymmetric(TreeNode root) {
if (root == null) return true;
// 比较当前节点的值 return isMirror(root.left, root.right);
}
private boolean isMirror(TreeNode t1, TreeNode t2) {
if (t1 == null && t2 == null) return true;
if (t1 == null || t2 == null) return false;
// 比较当前节点的值 return (t1.val == t2.val)
&& isMirror(t1.left, t2.right)
&& isMirror(t1.right, t2.left);
}
}
以上就是今天学习的三道经典二叉树问题。这些问题可以帮助你更好地理解二叉树的结构和属性,并且可以在实际编程中应用这些知识。

