对称二叉树:左子树的左和右子树的右对比

一、判断对称 = 判断镜像

对称二叉树不是比较每个节点的左右子节点。而是比较左子树的左子节点和右子树的右子节点 ,以及左子树的右子节点和右子树的左子节点

也就是交叉对比。


二、递归解法

javascript 复制代码
var isSymmetric = function(root) {
    if (!root) return true;
    return check(root.left, root.right);
};

function check(p, q) {
    if (!p && !q) return true;
    if (!p || !q) return false;
    if (p.val !== q.val) return false;
    return check(p.left, q.right) && check(p.right, q.left);
}

check(p.left, q.right)check(p.right, q.left)------这就是交叉对比。


三、迭代解法

javascript 复制代码
var isSymmetric = function(root) {
    if (!root) return true;
    const queue = [root.left, root.right];
    while (queue.length) {
        const p = queue.shift();
        const q = queue.shift();
        if (!p && !q) continue;
        if (!p || !q) return false;
        if (p.val !== q.val) return false;
        queue.push(p.left, q.right);
        queue.push(p.right, q.left);
    }
    return true;
};

入队顺序也是交叉的:p.left, q.rightp.right, q.left


四、复杂度

时间 O(n),空间 O(n)。


五、总结

  1. 对称 = 左子树和右子树互为镜像
  2. 交叉对比:左左 ↔ 右右,左右 ↔ 右左
  3. 递归代码最简洁,迭代用队列模拟
  4. 掌握对称二叉树 = 掌握翻转二叉树 + 判断两棵树相等
相关推荐
ysu_03142 天前
19-插入排序与希尔排序
数据结构·算法·排序算法
个 人 练 习 生2 天前
数据结构:排序算法详解
c语言·数据结构·经验分享·学习·算法·排序算法
Msshu1232 天前
2~5串锂电快充优选|XSP36 Type‑C升压/升降压快充管理芯片
数据结构·随机森林·贪心算法·排序算法·线性回归·启发式算法
布莱克6053 天前
C++ 七大排序算法详解:选择、冒泡、插入、计数、堆、快速与归并排序
数据结构·c++·算法·排序算法
LuminousCPP3 天前
数据结构-排序(三):快速排序进阶|挖坑法、双指针交换与手动栈非递归实现
c语言·数据结构·笔记·算法·排序算法
Doubbbbbbble云3 天前
基于空间局部性的排序算法性能重构思路4
java·重构·排序算法
洋不写bug5 天前
排序(一)基础排序,插入|希尔|冒泡|直接选择排序详解
java·算法·排序算法·插入排序·冒泡排序·希尔排序·直接选择排序
王老师青少年编程6 天前
信奥赛csp初赛高频考点【排序算法】(详细解析)
c++·排序算法·csp-j·csp·高频考点·初赛·信奥赛
LuminousCPP7 天前
数据结构 - 排序(二):快速排序从错误初版到优化版|双指针划分 + 三数取中 + 小区间插入优化
c语言·数据结构·笔记·算法·排序算法
LuminousCPP8 天前
数据结构-排序(一):基础排序算法横向对比|冒泡、插入、希尔、堆与双向选择,详解二分 / Knuth 增量
c语言·数据结构·笔记·算法·排序算法