一、题目
给你一个二叉树的根节点 root
, 检查它是否轴对称。
输入:root = [1,2,2,3,4,4,3] 输出:true
二、思路
1 把对应位置的依次对比,所谓对应位置就是:对称的节点位置,比如上图2的左和3的右,以及2的右和3的左。只有这2个位置都对称,我们会理解为2这棵树和2这颗树对称
2 因此,递归的比较对应位置的节点是否完全相同
3 递归体中的逻辑就是:
* 1 要么2个都是空,说明对应位置都为空 * 2 要么1个为空,一定不对称 * 3 要么2个都不空,值不相等也不对称
三、代码
class Solution {
public boolean isSymmetric(TreeNode root) {
if (root.left == null && root.right == null) return true;
if (root.left == null && root.right != null) return false;
if (root.left != null && root.right == null) return false;
return dfs(root.left, root.right);
}
public boolean dfs(TreeNode left, TreeNode right) {
/**
* 传进来的节点是对应位置的,需要完全相同:
* 1 要么2个都是空,说明对应位置都为空
* 2 要么1个为空,一定不对称
* 3 要么2个都不空,值不相等也不对称
*/
if (left == null && right == null) return true;
if (left == null || right == null) return false;
if (left.val != right.val) return false;
return dfs(left.left, right.right) && dfs(left.right, right.left); //递归的比较当前2个节点左和右,右和左,同时为true最终会返回true
}
}