剑指 Offer 28. 对称的二叉树(简单)

通过率 58.0%

题目链接

题目描述:

请实现一个函数,用来判断一棵二叉树是不是对称的。如果一棵二叉树和它的镜像一样,那么它是对称的。

例如,二叉树 [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

示例 1:

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

示例 2:

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

限制:

0 <= 节点个数 <= 1000

思路:

从根节点 root 出发,让它的左子树 tl 与右子树 tr 的值比较(即 root.left 与 root.right 的val)

再让 tl 的左子树与 tr 的右子树的值比较, tl 的右子树与 tr 的左子树的值比较(即 tl.left 与 tr.right,tl.right 与 tr.left 的val)

依此类推,每次比较的都是对称的节点,就能判断出来了

 1 /*JavaScript*/
 2 /**
 3  * Definition for a binary tree node.
 4  * function TreeNode(val) {
 5  *     this.val = val;
 6  *     this.left = this.right = null;
 7  * }
 8  */
 9 /**
10  * @param {TreeNode} root
11  * @return {boolean}
12  */
13 var mirror = function(treel, treer) {
14     if(!treel && !treer) return true
15     if(!treel || !treer || treel.val !== treer.val) return false
16     return mirror(treel.left, treer.right) && mirror(treel.right, treer.left)
17 }
18 
19 var isSymmetric = function(root) {
20     // 若传入的为空树,直接返回true
21     return !root || mirror(root.left, root.right)
22 };
原文地址:https://www.cnblogs.com/wwqzbl/p/15149675.html