您的位置:首页 > 房产 > 建筑 > 海外英文建站_赶集网发布信息免费_免费手游推广平台_互联网营销师培训学校

海外英文建站_赶集网发布信息免费_免费手游推广平台_互联网营销师培训学校

2024/12/27 10:42:52 来源:https://blog.csdn.net/pianmian1/article/details/144699394  浏览:    关键词:海外英文建站_赶集网发布信息免费_免费手游推广平台_互联网营销师培训学校
海外英文建站_赶集网发布信息免费_免费手游推广平台_互联网营销师培训学校

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

问题描述:

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

广度优先思路解析:

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

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com