题目描述

给你一个二叉树的根节点 root,检查它是否轴对称。

示例 1:
输入:root = [1,2,2,3,4,4,3]
输出:true

示例 2:
输入:root = [1,2,2,null,3,null,3]
输出:false

思路&js代码

1、递归

const check = (p: TreeNode | null, q: TreeNode | null): boolean => {
    if (!p && !q) return true;
    if (!p || !q) return false;
    return p.val === q.val && check(p.left, q.right) && check(p.right, q.left);
}
var isSymmetric = function(root: TreeNode | null): boolean {
    return check(root.left, root.right);
};
 

2、迭代

const check = (u: TreeNode | null, v: TreeNode | null): boolean => {
    const q: (TreeNode | null)[] = [];
    q.push(u),q.push(v);
 
    while (q.length) {
        u = q.shift()!;
        v = q.shift()!;
 
        if (!u && !v) continue;
        if ((!u || !v) || (u.val !== v.val)) return false;
 
        q.push(u.left); 
        q.push(v.right);
 
        q.push(u.right); 
        q.push(v.left);
    }
    return true;
}
var isSymmetric = function(root: TreeNode | null): boolean {
    return check(root, root);
};