题目:
给定一个二叉树,检查它是否是镜像对称的。
例如,二叉树 [1,2,2,3,4,4,3] 是对称的。
即其关于中间的线对称,左子树的左子节点等于右子树的右子节点,左子树的右子节点等于右子树的左子节点。
递归法
如果左右子树都为空,说明是对称的;如果只有一个子树为空,说明不对称;如果左右子树当前的值不相等,说明不相等。然后再递归求 p 的左子树与 q 的右子树,以及 p 的右子树与 q 的左子树。
/**
* Definition for a binary tree node.
* function TreeNode(val) {
* this.val = val;
* this.left = this.right = null;
* }
*/
/**
* @param {TreeNode} root
* @return {boolean}
*/
var isSymmetric = function(root) {
return check(root,root);
};
var check = function(p,q){
if(p==null && q==null){
return true;
}
if(p==null || q==null || p.val!=q.val){
return false;
}
return check(p.left,q.right) && check(p.right,q.left);
}
迭代法
var isSymmetric = function(root) {
if(!root) return true;
var stack = [root.left,root.right];
while(stack.length){
var p = stack.pop();
var q = stack.pop();
if (p === q) continue;
if (p && q && p.val === q.val) {
stack.push(p.left, q.right, p.right, q.left);
} else {
return false;
}
}
return true;
};
本文为作者关于LeetCode的解法
大神解法请自行搜索
如果觉得有用麻烦点个赞