news 2026/8/22 2:23:57

【每天学习一点算法 2025/12/18】对称二叉树

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
【每天学习一点算法 2025/12/18】对称二叉树

每天学习一点算法 2025/12/18

题目:对称二叉树

给你一个二叉树的根节点root, 检查它是否轴对称。

  1. 老规矩先来递归, 检查二叉树是否轴对称,我们是不是得比较根节点下面得两个子树是否是轴对称,那么我们只需要递归比较两个子树的值即可,那要怎么传参呢?首先肯定是要将根节点的两个子节点作为初始传参传进去的,那么我们需要一个辅助函数,然后每次递归对称传递子结点比较。

    functionisSymmetric(root:TreeNode|null):boolean{if(!root)returntrue;// 空树默认为true// 定义辅助函数 递归比较两个子树functionvalidate(left:TreeNode|null,right:TreeNode|null):boolean{// 两个子节点同时为空才有轴对称的可能if(!left&&!right)returntrue;if(!left||!right)returnfalse;// 比较左右子节点的值,并传递对称的子节点递归returnleft.val===right.val&&validate(left.left,right.right)&&validate(left.right,right.left);}// 调用辅助函数returnvalidate(root.left,root.right);};
  2. 还有我们是不是可以用层序遍历的方法取得每一层的节点然后我们校验他们是否是对称就行了。核心思想其实跟递归是一样的,找到对称节点作比较。

    如果我们拓展下一层按照左左↔右右、左右↔右左的顺序入队列,那么每两个节点都是对称位置上的节点了,比如说我们有一个四层的结构对称的树,像下面这个样。

    1 / \ 2 3 / \ / \ 4 5 6 7 / \ / \ / \ / \ 8 9 10 11 12 13 14 15
    • 我们初始两个子节点入队列:[2, 3]
    • 然后2, 3出队列,子节点按照左左↔右右、左右↔右左的顺序入队列:[4, 7, 5, 6]
    • 然后4, 7出队列,子节点按照左左↔右右、左右↔右左的顺序入队列:[5, 6, 8, 15, 9, 14]
    • 然后5, 6出队列,子节点按照左左↔右右、左右↔右左的顺序入队列:[8, 15, 9, 14, 10, 13, 11, 12]
    • 然后剩下的子节点两两出队列。

    可以看到整个循环的过程子节点的遍历是从上到下,每层从两端向中间收拢的,我们按照这种方式遍历比较两两出队列的节点值就可判断出树是否对称。

    functionisSymmetric(root:TreeNode|null):boolean{// 空树默认为对称if(!root)returntrue;// 初始化队列,用于层序遍历对称位置的节点constqueue:Array<TreeNode|null>=[];// 根节点的左右子节点都为空,是对称树if(!root.left&&!root.right)returntrue;// 根节点的左右子节点只有一个为空,必然不对称if(!root.left||!root.right)returnfalse;// 将根节点的左右子节点(对称的起始节点)入队queue.push(root.left);queue.push(root.right);// 层序遍历队列中的对称节点对while(queue.length){// 每次取出队列前两个节点(一对对称节点)constleft=queue.shift()!;constright=queue.shift()!;// 两个节点都为空,说明当前对称位置无节点,继续检查下一对if(!left&&!right)continue;// 不对称的情况:// 1. 其中一个节点为空,另一个非空// 2. 两个节点值不相等if((!left||!right)||(left.val!==right.val))returnfalse;// 按对称规则将下一层节点入队:// 左节点的左子节点对应右节点的右子节点queue.push(left.left);queue.push(right.right);// 左节点的右子节点对应右节点的左子节点queue.push(left.right);queue.push(right.left);}// 所有对称节点对都验证通过,说明是对称二叉树returntrue;}

题目来源:力扣(LeetCode)

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/8/21 14:14:10

零基础入门学网络安全(详细),看这篇就够了

目录 1.什么是网络安全 1.1 网络安全的定义&#xff1a;1.2 信息系统&#xff08;Information System&#xff09;1.3 信息系统安全三要素&#xff08;CIA&#xff09;1.4 网络空间安全1.5 国家网络空间安全战略1.6 网络空间关注点1.7 网络空间安全管理流程 2.网络安全术语3.…

作者头像 李华
网站建设 2026/8/19 0:03:15

全网热议!2025年高口碑上海本凡科技小程序开发公司价格TOP3推荐

随着数字化转型的不断推进&#xff0c;上海的小程序开发公司选择越来越多&#xff0c;企业在寻找合适的合作伙伴时&#xff0c;难免会遇到价格参差不齐的情况。为了帮助企业快速了解市场状况&#xff0c;本文将介绍2025年高口碑的三家小程序开发公司&#xff0c;从多方面进行综…

作者头像 李华
网站建设 2026/8/22 2:17:48

如何为超宽屏显示器选择 KVM 切换器?

引言&#xff1a; 随着超宽屏显示器因其卓越的视觉体验和高效性而获得广泛认可&#xff0c;越来越多的用户选择用这种宽广的屏幕替代传统的双显示器方案。然而&#xff0c;超宽屏与 KVM 切换器的兼容性是一个特殊的挑战。并非所有 KVM 切换器&#xff0c;即使拥有正确的接口类型…

作者头像 李华
网站建设 2026/8/21 23:00:11

无感刷新Token全攻略:实现用户“永不掉线”的极致体验

无感刷新Token全攻略:实现用户“永不掉线”的极致体验 想象一下,用户正沉浸在购物车结算的最后一步,却突然被弹回登录页面——这种体验糟透了。本文将彻底解决这个问题。 1. 引言:为什么需要无感刷新Token? 在基于Token的Web认证体系中,Access Token(访问令牌)通常有较…

作者头像 李华