题目

点击前往

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

示例 1:

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

示例 2:

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

示例 3:

1
2
输入:root = []
输出:[]

解题思路

  • 此题需要明确一点:二叉树是否是对称二叉树其实是要来比较根节点的左右子树是否为镜像对称。
  • 所以需要比较的是左右子树的外侧节点和内侧节点。
  • 这里不能使用中序遍历,方便起见可以使用层次遍历
  • 另外,我们还需要考虑满足对称二叉树的条件。
    • 左节点为空,右节点不为空,不对称,return false
    • 左不为空,右为空,不对称 return false
    • 左右都为空,对称,返回true
    • 左右都不为空,比较节点数值,不相同就return false
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
/**
* 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) {
let queue =[];
if(root === null) return false;
queue.push(root.left);
queue.push(root.right);
while(queue.length !== 0){
let leftNode = queue.shift(),rightNode = queue.shift();
if(!leftNode && !rightNode) continue;
if(!leftNode || !rightNode || (leftNode.val !== rightNode.val)){
return false;
}
queue.push(leftNode.left);
queue.push(rightNode.right);
queue.push(leftNode.right);
queue.push(rightNode.left);
}
return true;
};