博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
LeetCode--101--对称二叉树
阅读量:6003 次
发布时间:2019-06-20

本文共 2970 字,大约阅读时间需要 9 分钟。

问题描述:

给定一个二叉树,检查它是否是镜像对称的。

例如,二叉树 [1,2,2,3,4,4,3] 是对称的。

1   / \  2   2 / \ / \3  4 4  3

但是下面这个 [1,2,2,null,3,null,3] 则不是镜像对称的:

1   / \  2   2   \   \   3    3

 

方法1:用两个列表模拟栈,初始a栈和b栈分别存储根节点的左节点和右节点,此后,a的左孩子进栈a,b的右孩子进栈b,a的右孩子进栈a,b的左孩子进栈b。出栈时进行比较,如果不相等则返回False

1 class Solution(object): 2     def isSymmetric(self, root): 3         """ 4         :type root: TreeNode 5         :rtype: bool 6         """ 7         if not root: 8             return True 9         stacka, stackb = [root.left], [root.right]10         while stacka and stackb:11             a = stacka.pop()12             b = stackb.pop()13             if not a and not b:14                 continue15 16             elif not a or not b:17                 return False18             elif a.val != b.val:19                 return False20             else:21                 stacka.append(a.left)22                 stackb.append(b.right)23                 stacka.append(a.right)24                 stackb.append(b.left)25         if stacka or stackb:26             return False27         else:28             return True

方法2:

1 class Solution(object): 2     def isSymmetric(self, root): 3         """ 4         :type root: TreeNode 5         :rtype: bool 6         """ 7         if root==None: 8             return True 9         if root.left and root.right:10             if root.left.val!=root.right.val:11                 return False12         13         l_list=[]14         r_list=[]15         def preVisit(self,root):16             if root==None:17                 l_list.append(None)18                 return19             if root.left==None and root.right==None:20                 l_list.append(root.val)21                 return22             preVisit(self,root.left)23             l_list.append(root.val)24             preVisit(self,root.right)25             26         def postVisit(self,root):27             if root==None:28                 r_list.append(None)29                 return30             if root.left==None and root.right==None: 31                 r_list.append(root.val)32                 return33             34             postVisit(self,root.right)35             r_list.append(root.val)36             postVisit(self,root.left)37             38         preVisit(self,root.left)39         postVisit(self,root.right)40         # print(l_list)41         # print(r_list)42         return l_list==r_list

l_list=[5,3,6,2,6,4,8]

r_list=[5,3,6,2,6,4,8]

方法3:

1 class Solution(object): 2     def isSymmetric(self, root): 3         """ 4         :type root: TreeNode 5         :rtype: bool 6         """ 7         def helper(root,mirror): 8             if not root and not mirror: 9                 return True10             if root and mirror and root.val == mirror.val:11                 return helper(root.left,mirror.right) and helper(root.right,mirror.left)12             return False13         return helper(root,root)

2018-09-07 19:51:41

转载于:https://www.cnblogs.com/NPC-assange/p/9606741.html

你可能感兴趣的文章
PowerDesigner跟表的字段加注释
查看>>
w !sudo tee %
查看>>
javascript面试题:如何把一句英文每个单词首字母大写?
查看>>
URAL 1962 In Chinese Restaurant 数学
查看>>
计算 TPS,QPS 的方式
查看>>
洛谷⑨月月赛Round2 P3393逃离僵尸岛[最短路]
查看>>
群晖NAS使用Docker安装迅雷离线下载出现the active key is not valid.
查看>>
spring boot 2使用Mybatis多表关联查询
查看>>
Making HTTP requests via telnet - Tony's Place
查看>>
千元机市场再添“新宠”,红米Note7和vivo Z3谁才是千元王者
查看>>
荣耀10GT升级EMUI 9.0体验分享:这可能是最好用的手机操作系统
查看>>
ZStack基于华芯通打造ARM国产云平台 助力云上贵州多项应用
查看>>
200本“保护日记”记录黄山迎客松生长变化
查看>>
多方力量携手呵护“中华水塔”青海三江源
查看>>
互联网的下一波红利在哪里?
查看>>
拿姐姐身份证登记结婚竟然成了!婚姻户籍信息共享难在哪儿
查看>>
恒大造车加速,联手柯尼塞格打造顶级新能源车
查看>>
JAVA大神说一个例子让你几分钟学会Annotation
查看>>
富士康要用机器人生产iPhone了?那么多工人怎么办?
查看>>
Python获取当前页面内的所有链接的五种方法
查看>>