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); } }
以上就是今天学习的三道经典二叉树问题。这些问题可以帮助你更好地理解二叉树的结构和属性,并且可以在实际编程中应用这些知识。