101 对称二叉树
思路参考力扣题解,别人的思路。镜像对称,就是左右两边相等,也就是左子树和右子树是相当的,也就是说要递归的比较左子树和右子树。
class Solution {
public boolean isSymmetric(TreeNode root) {
if(root == null) return true;
return dfs(root.left,root.right);
}
public boolean dfs(TreeNode left, TreeNode right) {
if(left==null && right==null) return true;
if(left==null && right!=null || right==null && left!=null) return false;
if(left.val != right.val) return false;
return dfs(left.right,right.left)&&dfs(left.left,right.right);
}
}
注意 dfs 中三个 if 的顺序,不可以更换。如果更换会报java.lang.NullPointerException: Cannot read field "val" because "<parameter2>" is null
的错误。这是因为要先确认两个节点是否为空、然后是否有单个为空,最后才能比较两个节点的值。