JAVA练习307- 对称二叉树 📅 2026/7/18 21:47:20 题目概览给你一个二叉树的根节点root 检查它是否轴对称。示例 1输入root [1,2,2,3,4,4,3]输出true示例 2输入root [1,2,2,null,3,null,3]输出false提示树中节点数目在范围[1, 1000]内-100 Node.val 100进阶你可以运用递归和迭代两种方法解决这个问题吗来源101. 对称二叉树 - 力扣LeetCode解题分析方法一递归是否对称我们可以看做比较两个节点 aba 和 b 的值是否相等a 的左节点 是否 等于 b 的右节点a 的右节点 是否 等于 a 的左节点判断左右节点相等其实也是比较两个节点因此我们可以使用递归来解决。时间复杂度O(n)空间复杂度O(n)/** * Definition for a binary tree node. * public class TreeNode { * int val; * TreeNode left; * TreeNode right; * TreeNode() {} * TreeNode(int val) { this.val val; } * TreeNode(int val, TreeNode left, TreeNode right) { * this.val val; * this.left left; * this.right right; * } * } */ class Solution { public boolean isSymmetric(TreeNode root) { if (root null) { return true; } return isSymmetric(root.left, root.right); } public boolean isSymmetric(TreeNode left, TreeNode right) { if (left null right null) { return true; } if (left null || right null) { return false; } if (left.val ! right.val) { return false; } return isSymmetric(left.left, right.right) isSymmetric(left.right, right.left); } }方法二迭代同方法一这里用队列来存储要比较的两个节点 a 和 b比较完再把 a.left、b.right、a.right、b.left 依次入队列就行比较时出队列两个节点直到队列为空。时间复杂度O(n)空间复杂度O(n)/** * Definition for a binary tree node. * public class TreeNode { * int val; * TreeNode left; * TreeNode right; * TreeNode() {} * TreeNode(int val) { this.val val; } * TreeNode(int val, TreeNode left, TreeNode right) { * this.val val; * this.left left; * this.right right; * } * } */ class Solution { public boolean isSymmetric(TreeNode root) { if (root null ) { return true; } QueueTreeNode queue new LinkedList(); queue.offer(root.left); queue.offer(root.right); while(!queue.isEmpty()) { TreeNode left queue.poll(); TreeNode right queue.poll(); if (left null right null) { continue; } if (left null || right null || left.val ! right.val) { return false; } queue.offer(left.left); queue.offer(right.right); queue.offer(left.right); queue.offer(right.left); } return true; } }