题目描述
分析
/**
* 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) {
};
经过分析可以看到,对称二叉树实际上是要对比左树和右树对称的节点,对于一层的子节点:
比如根节点 root,下一层的节点需要对比的是 root.left, root.right,因为他们是对称的,再下一层:
root.left.left, root.right.right
root.left.right, root.right.left
解题思路
我用递归来完成一层节点的两两比较
数据结构,算法
递归
思路
再递归中,对两节点进行比较,在把对称的节点对通过递归去对比
比较两节点是否都为空
两节点都是空,返回 true
只有一个节点是空
只有一个节点为 null 说明不符合要求,不对称,返回 false
对比两个节点值
对比两节点值
递归
这里递归的时候左右两边的对称,左边传右节点,右边传左节点
代码
/**
* 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) {
const recursiveCompare = (l, r) => {
if (!l && !r) return true
if (!l || !r) return false
return (
l.val === r.val &&
recursiveCompare(l.left, r.right) &&
recursiveCompare(l.right, r.left)
)
}
return recursiveCompare(root.left, root.right)
}