题目描述
原题链接
给你一个二叉树的根节点 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
 
个人解法
Javascript
递归
/** @lc app=leetcode.cn id=101 lang=javascript** [101] 对称二叉树*/// @lc code=start/*** 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)* }*/const check = function (root1, root2) {if (root1 === null && root2 !== null) {return false;}if (root1 !== null && root2 === null) {return false;}if (root1 === root2) {return true;}if (root1.val === root2.val) {return check(root1.left, root2.right) && check(root1.right, root2.left);} else {return false;}}/*** @param {TreeNode} root* @return {boolean}*/var isSymmetric = function (root) {return check(root.left, root.right);};// @lc code=end
Java
class Solution {public boolean isSymmetric(TreeNode root) {//调用递归函数,比较左节点,右节点return dfs(root.left,root.right);}boolean dfs(TreeNode left, TreeNode right) {//递归的终止条件是两个节点都为空//或者两个节点中有一个为空//或者两个节点的值不相等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);}}
其他解法
Java
Javascript
迭代
var isSymmetric = function(root) {//迭代方法判断是否是对称二叉树//首先判断root是否为空if(root===null){return true;}let queue=[];queue.push(root.left);queue.push(root.right);while(queue.length){let leftNode=queue.shift();//左节点let rightNode=queue.shift();//右节点if(leftNode===null&&rightNode===null){continue;}if(leftNode===null||rightNode===null||leftNode.val!==rightNode.val){return false;}queue.push(leftNode.left);//左节点左孩子入队queue.push(rightNode.right);//右节点右孩子入队queue.push(leftNode.right);//左节点右孩子入队queue.push(rightNode.left);//右节点左孩子入队}return true;};
