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