题目描述
给你一个二叉树的根节点 root , 检查它是否轴对称。
示例 1:
输入: root = [1,2,2,3,4,4,3]
输出: true
示例 2:
输入: root = [1,2,2,null,3,null,3]
输出: false
提示:
- 树中节点数目在范围
[1, 1000]内 -100 <= Node.val <= 100
进阶: 你可以运用递归和迭代两种方法解决这个问题吗?
分析解答
首先想到的就是递归。
但是要注意递归的条件判断:
- 左右子节点都不存在为 true
- 只有一个存在 为 false (因为上一条已经判断过都不存在,所以直接
!left || !right) - 左右值不相等为 false
- 左右相等为 true 吗?不不不!直接进入下一层递归,因为此时的 true 只是一个判断是否提前结束的标志。
还有一个需要注意的点,因为是中轴对称。所以递归到下一层时为判断左的左和右的右是否相等!!!
/**
* Definition for a binary tree node.
* function TreeNode(val, left, right) {
* this.val = (val===undefined ? 0 : val)
* this.left = (left===undefined ? null : left)
* this.right = (right===undefined ? null : right)
* }
*/
/**
* @param {TreeNode} root
* @return {boolean}
*/
var isSymmetric = function(root, flag = false) {
if (!root) return true;
function compare(left, right) {
if (!left && !right) return true
if (!left || !right) return false
if (left.val !== right.val) return false
return compare(left.left, right.right) && compare(left.right, right.left)
}
return compare(root.left, root.right)
};