首页 > 其他分享 >101.对称二叉树

101.对称二叉树

时间:2024-12-21 14:53:49浏览次数:7  
标签:right return queue 二叉树 push 对称 101 root left

var isSymmetric = function(root) {
    if(!root) return true;
    return isMirror(root.left, root.right);
};
function isMirror(left, right) {
    if(!left && !right) return true;
    if(!left || !right) return false;
    if(left.val !== right.val) return false;
    // 判断左右子树是否对称 (左子树的左节点和右子树的右节点, 左子树的右节点和右子树的左节点)
    return isMirror(left.right, right.left) && isMirror(left.left, right.right);
}

针对你提供的 isSymmetric 函数,可以从代码可读性和性能两个方面进行优化。以下是具体的优化建议:

1. 提升代码可读性

  • 函数命名isMirror 函数可以更明确地命名为 isSymmetricTrees,以更好地表达其功能。
  • 注释优化:现有的注释可以更加简洁明了,避免冗余。

2. 性能优化

  • 递归深度优化:当前的递归方式在处理大型树时可能会导致栈溢出。可以通过迭代的方式使用队列或栈来实现对称性检查,减少递归深度。
  • 提前返回:在比较节点值时,如果发现不对称可以直接返回 false,避免不必要的递归调用。

优化后的代码示例

var isSymmetric = function(root) {
    if (!root) return true;
    return isSymmetricTrees(root.left, root.right);
};

function isSymmetricTrees(left, right) {
    const queue = [];
    queue.push(left);
    queue.push(right);

    while (queue.length > 0) {
        left = queue.shift();
        right = queue.shift();

        if (!left && !right) continue;
        if (!left || !right) return false;
        if (left.val !== right.val) return false;

        queue.push(left.left);
        queue.push(right.right);
        queue.push(left.right);
        queue.push(right.left);
    }

    return true;
}

3. 迭代版本的优势

  • 避免递归深度过大:通过使用队列进行广度优先搜索(BFS),可以有效避免递归深度过大的问题。
  • 提高性能:迭代版本在处理大规模数据时通常比递归版本更快,因为减少了函数调用的开销。

标签:right,return,queue,二叉树,push,对称,101,root,left
From: https://www.cnblogs.com/KooTeam/p/18620759

相关文章

  • 12.16 二叉树的题目用acm模式 leetcode
    任务有leetcode1.将所有二叉树的题目用acm模式进行补充(完成了)github上面的所有二叉树ACM答案,模板https://github.com/PUNKDONG/leetcode/tree/master/src/treenodepackagetreenode;importjava.util.*;publicclasstreecode0_template{staticclassTreeNo......
  • 二叉树的代码实现
    main.c:tree.c:创建根,前序遍历,中序遍历,后序遍历,层序遍历,树的广度,树的深度,释放tree.h:queue.h:队列的代码实现:队列的实现-CSDN博客......
  • 数据结构-树(二叉树)
    在了解树具体的代码实现之前,先了解一下树的基础知识:根节点:第一个结点;叶子节点(终端节点):之后再没有其它结点的结点;分支节点(非终端节点):之后还有其它结点的结点;深度:即树的层数;(广)度:最大的节点的度;节点的度:节点的子节点个数这里主要介绍二叉树,即度为二,区分左右子节点的树结构。......
  • ADSP-TS101SAB1Z100 一款高性能数字信号处理器DSP芯片
    描述ADSP-TS101S是TigerSHARC处理器系列中的第一位成员。ADI公司的TigerSHARC处理器面向依赖多个处理器协作执行运算密集型实时功能的多种信号处理应用,非常适合视频和通信市场,包括3G蜂窝和宽带无线基站以及国防、医疗成像、工业仪器仪表等。ADSP-TS101S采用静态超标量架构,集成......
  • IEC101/140 监视点与控制点
    IEC101/140监视点与控制点IEC-60870-5-104协议适用于远程控制设备和系统,通过数据传输来监控和控制地理上广泛的过程。该协议结合了IEC-60870-5-101协议和TCP/IP提供的传输功能。任何使用IEC-60870-5-104协议的应用程序都将有一个主站(控制站)和一个或多个从站(受控站)。主站......
  • 【LC】104. 二叉树的最大深度
    题目描述:给定一个二叉树 root ,返回其最大深度。二叉树的 最大深度 是指从根节点到最远叶子节点的最长路径上的节点数。示例1:输入:root=[3,9,20,null,null,15,7]输出:3示例2:输入:root=[1,null,2]输出:2提示:树中节点的数量在 [0,104] 区间内。-100<=No......
  • Debian安装RTL8101E_RTL8102E_RTL8103E_RTL8105E
    0.适用范围由于Debian默认采用r8169驱动,不是适用该型号驱动的网卡需要另外打驱动。而且r810x系列的网卡由于年代久远无法采用安装dkms额外软件包的方法,只能从官方网下载并编译。r8101驱动适用于RTL8101E/RTL8102E/RTL8103E/RTL8105E/RTL8106E/RTL8107E1.下载驱动进real......
  • GBU1016-ASEMI开关电源整流桥GBU1016
    编辑:llGBU1016-ASEMI开关电源整流桥GBU1016型号:GBU1016品牌:ASEMI封装:GBU-4特性:插件整流桥正向电流:10A反向耐压:1600V恢复时间:>2000ns引脚数量:4芯片个数:4芯片尺寸:50MIL浪涌电流:220A漏电流:>10uA工作温度:-55℃~150℃包装方式:3k/盘;30k/箱备受欢迎的GBU1016整流桥ASEMI......
  • 二叉树中和为某一值的路径 剑指offer
    题目描述        输入一棵二叉树和一个整数,打印出二叉树中节点值的和为输入整数的所有路径。从树的根节点开始往下一直到叶节点所经过的节点形成一条路径。        二叉树节点的定义如下:题目分析                分析完前面具体的例子......
  • 二叉树的右视图
    二叉树的右视图描述给定一棵二叉树,想象自己站在它的右侧,按照从顶部到底部的顺序,返回从右侧所能看到的节点值。示例:输入:[1,2,3,null,5,null,4]输出:[1,3,4]解释:1<---/\23<---\\54<---代码1(错误)......