给定一棵二叉树,判断其是否是自身的镜像(即:是否对称)
例如:下面这棵二叉树是对称的

下面这棵二叉树不对称。

数据范围:节点数满足 0≤n≤1000,节点上的值满足 0∣val∣≤1000
要求:空间复杂度 O(n),时间复杂度 O(n)
备注:你可以用递归和迭代两种方法解决这个问题
示例1
输入:{1,2,2,3,4,4,3}
返回值:true
示例2
输入:{8,6,9,5,7,7,5}
返回值:false
- import java.util.*;
-
- /*
- * public class TreeNode {
- * int val = 0;
- * TreeNode left = null;
- * TreeNode right = null;
- * public TreeNode(int val) {
- * this.val = val;
- * }
- * }
- */
-
- public class Solution {
- /**
- * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
- *
- *
- * @param pRoot TreeNode类
- * @return bool布尔型
- */
- public boolean isSymmetrical (TreeNode pRoot) {
- // write code here
- if (pRoot == null) {
- return true;
- }
-
- return func(pRoot.left, pRoot.right);
- }
-
- public boolean func(TreeNode nodeA, TreeNode nodeB) {
- if (nodeA == null && nodeB == null) {
- return true;
- } else if (nodeA == null || nodeB == null || nodeA.val != nodeB.val) {
- return false;
- }
-
- return func(nodeA.left, nodeB.right) && func(nodeA.right, nodeB.left);
- }
- }
这题可以用递归做可以用迭代,重点在于将哪些结点两两对比,对比的依据是什么。