题目
题目内容很好理解,判断一棵树是镜像对称。
思路
根据题目,我们可以将问题等价为以下问题:
对于一对左右节点:
-
左右节点的值是否相等?
-
左节点的右节点与右节点的左节点是否相等?
-
左节点的左节点与右节点的右节点是否相等?
如果对于所有对称位置的节点,都满足上述三个条件,那么这棵树即为对称二叉树。
了解了等价问题后,剩下只需要深度优先遍历整棵树就好了,dfs分别传入一组对称位置节点(left, right)
class Solution {
public boolean isSymmetric(TreeNode root) {
return dfs(root.left, root.right);
}
//深度遍历函数
boolean dfs(TreeNode left, TreeNode right){
//递归结束条件
if(left == null && right == null){
return true;
//如果一对node中只有一个为null,则必然不对称
}else if(left == null || right == null){
return false;
}else{//如果一对node都不为空,则执行上面三个判断条件
return (left.val == right.val) && dfs(left.left, right.right) && dfs(left.right, right.left);
}
}
}