通过率 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 };