当前位置: 首页 > news >正文

对称二叉树

本节判断一棵二叉树是否为对称二叉树,用深度优先算法和广度优先搜索算法均可以实现.

问题描述:

给定一棵二叉树,判断该二叉树是否为对称二叉树.

广度优先思路解析:

如果所有镜像对称位置上两节点都相同,就说明这棵树一定是对称的.那么如何对比对称位置上的两个节点比较方便呢?借助队列结构,令需要被比较的两个节点相邻,每次从队列中取出相邻的两个节点进行对比:如果相同,则继续;如果不同 ,则返回结果False.

确定了上述思路后,再考虑哪里是需要比较的两个节点.变量如下:

root变量:表示给定二叉树的根节点

queue变量:表示队列

root1:表示取出的第一个节点

root2:表示取出的第二个节点

root1和root2是对称位置上的两个节点

完整代码如下

def symmetric(root):# 如果根节点为空,返回True,因为空树被认为是对称的if not root: return True# 初始化一个队列,用于存放节点queue = []# 将根节点的左右子树加入队列queue.append(root.left)queue.append(root.right)# 循环,直到队列为空while queue:# 从队列中弹出两个节点root1 = queue.pop()root2 = queue.pop()# 如果两个节点都为空,继续循环if not root1 and not root2: continue# 如果一个为空,一个非空,或者两个节点的值不相等,则树不对称if not root1 or not root2: return Falseif root1.val != root2.val: return False# 如果当前节点的子节点不为空,则将子节点加入队列# 注意这里的顺序,左节点的左子叶和右节点的右子叶一组,左节点的右子叶和右节点的左子叶一组if root1.left or root2.left or root1.right or root2.right:queue.append(root1.left)queue.append(root2.right)queue.append(root1.right)queue.append(root2.left)# 如果所有节点都检查完毕,且没有发现不对称的情况,则树是对称的return True


http://www.mrgr.cn/news/81264.html

相关文章:

  • 05vue3实战-----配置项目代码规范
  • [Deepseek-自定义Ollama 安装路径+lmStudio 简易安装]
  • 用AI写游戏1——js实现贪吃蛇
  • 结构化表达(三):归纳分组
  • 【Block总结】PSA,金字塔挤压注意力,解决传统注意力机制在捕获多尺度特征时的局限性
  • 深度学习 Pytorch 神经网络的学习
  • ffmpeg之播放一个yuv视频
  • 连续自成核退火热分级(SSA)技术表征共聚聚丙烯(PP)分子链结构
  • pytorch MoE(专家混合网络)的简单实现。
  • 国内RPA产品对比
  • 【笔记】学校教的SSH:远程连接到另一个电脑 并对其进行操作
  • 3D视觉坐标变换(像素坐标转换得到基于相机坐标系的坐标)
  • 自然语言编写的prompt为啥比不上编程语言prompt高效?
  • shiro注入filter内存马(绕过长度限制)
  • 武汉做网站优化推广效果的科学评估方法
  • Dubbo简单总结
  • 工业相机镜头选型知识详解
  • WEB 漏洞 - 文件包含漏洞深度解析
  • 区块链平台安全属性解释
  • Java中的访问修饰符:分类、作用及应用场景
  • 虚幻5 UE5 UNREALED_API d虚幻的
  • HTML与数据抓取:GET与POST方法详解
  • shell 编程(三)
  • 鸿蒙基础组件
  • 简单了解函数递归
  • navicat在pg数据库中设置自增