题目
给定一棵二叉树,判断其是否是自身的镜像(即:是否对称)
例如:下面这棵二叉树是对称的
下面这棵二叉树不对称。
数据范围:节点数满足 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 hereif (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);}
}
总结
这题可以用递归做可以用迭代,重点在于将哪些结点两两对比,对比的依据是什么。