news 2026/5/16 7:53:16

039对称二叉树

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
039对称二叉树

对称二叉树

题目链接:https://leetcode.cn/problems/symmetric-tree/description/?envType=study-plan-v2&envId=top-100-liked

我的解答:

//方法一:递归 //时间复杂度:O(n) //空间复杂度:O(n) public boolean isSymmetric(TreeNode root) { return isEqual(root.left,root.right); } public boolean isEqual(TreeNode left, TreeNode right){ if(left==null&&right==null){ return true; } if(left==null||right==null){ return false; } if(!isEqual(left.left,right.right) || !isEqual(left.right,right.left)){ return false; } return left.val==right.val; } //方法二:迭代(采用双端队列) //时间复杂度:O(n) //空间复杂度:O(n) public boolean isSymmetric(TreeNode root) { if(root.left==null&&root.right==null){ return true; } if(root.left==null||root.right==null){ return false; } Deque<TreeNode> queue = new LinkedList<>(); queue.addFirst(root.left); queue.addLast(root.right); while(!queue.isEmpty()){ TreeNode left = queue.getFirst(); queue.removeFirst(); TreeNode right = queue.getLast(); queue.removeLast(); if(left.val!=right.val){ return false; } if(left.left!=null&&right.right!=null){ queue.addFirst(left.left); queue.addLast(right.right); } if((left.left==null&&right.right!=null) || (left.left!=null&&right.right==null)){ return false; } if(left.right!=null&&right.left!=null){ queue.addFirst(left.right); queue.addLast(right.left); } if((left.right==null&&right.left!=null) || (left.right!=null&&right.left==null)){ return false; } } return true; }

分析:

​ 方法一解题思路:采用递归。递归判断两个对称位置上的节点的值和子树是否也呈对称关系。

​ 方法二解题思路:采用迭代。通过将位置上对称的两个节点分别从队列的头和尾加入队列,每次分别从队列头和尾取出一个节点并删除,判断这两个节点的是否相等,若不相等,则二叉树不对称;若相等,且两个节点位置上对称的子节点都不为空,则按照位置对称关系分别从队列头、尾加入队列,若两个节点位置上对称的子节点存在一方为空但另一方不为空的情况就返回false,不断重复以上过程,若直到队列为空都还未出现不对称的情况,则返回true。

看了官方题解后的解答:

//官方题解的方法一与我的解答的方法一思路一致 //方法一:递归 //时间复杂度:O(n) //空间复杂度:O(n) public boolean isSymmetric(TreeNode root) { return check(root.left, root.right); } public boolean check(TreeNode p, TreeNode q) { if (p == null && q == null) { return true; } if (p == null || q == null) { return false; } return p.val == q.val && check(p.left, q.right) && check(p.right, q.left); } //方法二:迭代(采用队列) //时间复杂度:O(n) //空间复杂度:O(n) public boolean isSymmetric(TreeNode root) { //将root加入队列两次,可以避免单独讨论边界情况(二叉树根节点) return check(root,root); } public boolean check(TreeNode u, TreeNode v){ //队列中连续的两个节点位置上是对称的 Queue<TreeNode> queue = new LinkedList<>(); queue.offer(u); queue.offer(v); while(!queue.isEmpty()){ u = queue.poll(); v = queue.poll(); if(u==null&&v==null){ continue; } if((u==null || v==null) || u.val!=v.val){ return false; } queue.offer(u.left); queue.offer(v.right); queue.offer(u.right); queue.offer(v.left); } return true; }

分析:方法二采用队列。首先将二叉树的根节点加入队列两次,这样可以避免单独讨论边界情况。用两个指针u、v同时移动,当u向左孩子移动时v向右孩子移动,当u向右孩子移动时v向左孩子移动,这样队列中连续的两个节点在位置上总是对称的。另外,LinkedList实现的队列是允许插入null的,所以在将对称位置的一对节点加入队列时可以避免单独讨论节点为null的情况。

总结

  • 本题可采用递归和迭代两种方法进行解答。
  • 引入队列是把递归程序改写成迭代程序的常用方法。
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/5/16 7:46:04

2026亚洲消费电子展!媒体曝光资源加码

北京讯——2026年6月10日至12日&#xff0c;2026亚洲消费电子展将在北京盛大启幕。作为亚太消费电子领域极具影响力的行业盛会&#xff0c;本届展会全面升级品牌传播矩阵&#xff0c;百家主流媒体集结现场全程报道&#xff0c;全媒体曝光资源重磅加码。目前展会赞助合作席位余量…

作者头像 李华
网站建设 2026/5/16 7:45:09

AI日报 - 2026年05月15日

#本文由AI生成 &#x1f44b; 本期看点&#xff08;约3分钟读完&#xff09;&#xff1a; ✅ MiniMax Agent更名Mavis&#xff0c;首发AI小队协同作战✅ GPT-5.6内测启动&#xff0c;Codex ultrafast模式提速2–3倍✅ NotebookLM以结构化RAG实现“零幻觉”知识问答✅ 腾讯宣布…

作者头像 李华
网站建设 2026/5/16 7:41:07

基于Rust与llama.cpp的本地大模型推理服务器部署与实战指南

1. 项目概述&#xff1a;一个本地化的大模型推理服务器最近在折腾本地大模型部署的朋友&#xff0c;可能都绕不开一个痛点&#xff1a;虽然模型文件&#xff08;GGUF格式&#xff09;有了&#xff0c;推理框架&#xff08;比如llama.cpp&#xff09;也装好了&#xff0c;但怎么…

作者头像 李华
网站建设 2026/5/16 7:41:04

艾络迅™ 重磅发布企业级MQTT高并发接入解决方案 - HyperMQ

随着物联网规模化持续推进&#xff0c;企业设备接入面临多重挑战&#xff1a;一方面&#xff0c;需要在海量并发与业务峰值下仍保持连接稳定、时延可控&#xff1b;另一方面&#xff0c;自研投入高、迭代周期长&#xff0c;随着规模扩大&#xff0c;算力、带宽与存储等基础设施…

作者头像 李华
网站建设 2026/5/16 7:41:03

ESP32-S2/S3 UF2 Bootloader烧录指南:WebSerial与esptool.py双方案详解

1. 项目概述与核心价值如果你手头有一块ESP32-S2或S3的开发板&#xff0c;比如Adafruit的Feather、QT Py或者Qualia系列&#xff0c;并且发现它无法通过USB拖放UF2文件进行编程&#xff0c;或者干脆连电脑都识别不出来了&#xff0c;那么这篇文章就是为你准备的。这种情况在嵌入…

作者头像 李华
网站建设 2026/5/16 7:37:03

智能车光电组核心技术解析:从传感器融合到PID控制实战

1. 项目概述&#xff1a;一场关于速度与智慧的经典对决如果你对嵌入式系统、自动控制或者机器人竞赛有过哪怕一丝兴趣&#xff0c;那么“飞思卡尔智能车竞赛”&#xff08;现已更名为“恩智浦智能车竞赛”&#xff09;这个名字&#xff0c;你一定不会陌生。它不仅仅是一个比赛&…

作者头像 李华