题目描述:
给你一个二叉树的根节点
root
, 检查它是否轴对称。输入:root = [1,2,2,3,4,4,3] 输出:true
解法一 递归:
function isSymmetric(root) {
// 递归,递归三步
// 1 确认参数和返回值 参数就是要对比的两个节点,返回值是题目要求的布尔值
// 2 确认终止条件 要么都为空节点,要么一个为空节点,要么都有值但是不相同 值都相同的情况下接着比较
// 3 满足值都相同的情况下,再进行左右节点的比较
function compare(leftNode,rightNode) {
if(leftNode === null && rightNode === null) return true;
if(leftNode === null || rightNode === null) return false;
if(leftNode.val !== rightNode.val) return false;
let out = compare(leftNode.left,rightNode.right);
let inner = compare(leftNode.right,rightNode.left)
return out && inner ;
}
if(root === null) {
return true;
}
return compare(root.left,root.right);
};
用时:
// 199/199 cases passed (67 ms)
// Your runtime beats 68.39 % of typescript submissions
// Your memory usage beats 60.44 % of typescript submissions (52
解法二:迭代法(栈)
function isSymmetric(root) {
if(!root) return true;
let stack = [root.left,root.right];
// 每次把要比较的两个元素两两入栈,如果对不上就return 对的上就接着入栈
while(stack.length) {
let left = stack.shift();
let right = stack.shift();
if(left === null && right === null) continue;
if(left === null || right === null) return false;
if(left.val !== right.val) return false;
stack.push(left.left,right.right);
stack.push(left.right,right.left);
}
return true;
};
用时:
// 199/199 cases passed (64 ms)
// Your runtime beats 81.52 % of typescript submissions
// Your memory usage beats 62.29 % of typescript submissions (52 MB)