一开始打算利用递归遍历(根->左->右)和(根->右->左)结果是否相同来判断一颗二叉树是否是对称二叉树,但是一直存在漏洞;之后尝试结合三种遍历中的两种来做,发现仍然有漏洞。
最后想到的办法是将空节点也加入到结果列表中,成功解决。
# Definition for a binary tree node.
# class TreeNode:
# def __init__(self, x):
# self.val = x
# self.left = None
# self.right = None
class Solution:
def isSymmetric(self, root: TreeNode) -> bool:
# 根左遍历,根右遍历,判断是否相同
if root == None:
return True
po_left = []
po_right = []
def PostOrder_left(root):
if root == None:
po_left.append(None)
return
po_left.append(root.val)
PostOrder_left(root.left)
PostOrder_left(root.right)
def PostOrder_right(root):
if root == None:
po_right.append(None)
return
po_right.append(root.val)
PostOrder_right(root.right)
PostOrder_right(root.left)
PostOrder_left(root)
PostOrder_right(root)
# print(po_left)
# print(po_right)
return po_left == po_right
第二种解法参考了力扣的画解算法101,同时输入两棵树A和B,判断A的左、右子树和B的右、左子树是否对称。
class Solution:
def isSymmetric(self, root: TreeNode) -> bool:
# 前序遍历两颗树
def two_tree(t1, t2):
# print('111')
if t1 == None and t2 == None:
return True
elif not t1 or not t2:
return False
else:
if t1.val == t2.val:
r1 = two_tree(t1.left, t2.right)
r2 = two_tree(t1.right, t2.left)
return r1 and r2
else:
return False
return two_tree(root, root)
本文探讨了如何通过递归遍历判断一棵二叉树是否对称。作者首先尝试了根-左-右和根-右-左的遍历方式,然后改进为将空节点考虑进去,解决了原有方法的漏洞。此外,还介绍了一种使用前序遍历的方法,比较两棵树的左右子树对称性。这两种解决方案都有效地解决了对称二叉树的识别问题。
544

被折叠的 条评论
为什么被折叠?



