题干
给定一个二叉树,检查它是否是镜像对称的。
例如,二叉树 [1,2,2,3,4,4,3] 是对称的。
1
/ \
2 2
/ \ / \
3 4 4 3
但是下面这个 [1,2,2,null,3,null,3]
则不是镜像对称的:
1
/ \
2 2
\ \
3 3
来源:力扣(LeetCode) 链接:leetcode-cn.com/problems/sy… 著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
解法:
首先关于对称二叉树,我觉得首先应该是根节点对应的左右节点不为空。(注意我们所说的左右是指,对称的左右)
因此我们确定地规定的退出条件,首先当当前节点的左右节点同时到达叶子节点,则为true。如果只有一方到达另一方没有到达,则为false。
接着我们来讨论具体的比较的逻辑,如果根节点以下的左右节点相等返回true。
注意我们这里的左右顺序指的是,根节点开始为正常,左右节点也正常,从这里开始就是需要递归我们的左节点的左节点和右节点的右节点以及左节点的右节点以及右节点的左节点。
代码实现:
/**
* @param {TreeNode} root
* @return {boolean}
*/
var isSymmetric = function (root) {
function doFind(left, right) {
if (left == null && right == null) return true
if (left == null || right == null) return false
if (left.val == right.val && doFind(left.left, right.right) && doFind(left.right, right.left)) {
return true
} else {
return false
}
}
return doFind(root.left, root.right);
};
\