101. 对称二叉树
在上一题后自信打开下一题,想直接秒了结果被秒了
先来看看错误代码
# Definition for a binary tree node.
# class TreeNode(object):
# def __init__(self, val=0, left=None, right=None):
# self.val = val
# self.left = left
# self.right = right
class Solution(object):
def isSymmetric(self, root):
"""
:type root: Optional[TreeNode]
:rtype: bool
"""
lresult=[]
rresult=[]
ltree=root.left
rtree=root.right
lresult=self.linorder(ltree,lresult)#错啦,不用赋值
rresult=self.rinorder(rtree,rresult)#错啦,不用赋值
print(lresult)
print(rresult)
if rresult==lresult:
return "true"
else:
return "false"
def linorder(self,node,result):
if not node:
return result#错啦,不用返回值
self.linorder(node.left,result)
result.append(node.val)
self.linorder(node.right,result)
def rinorder(self,node,result):
if not node:
return result#错啦,不用返回值
self.rinorder(node.right,result)
result.append(node.val)
self.rinorder(node.left,result)
理想状态是将树一分为二,一个中序排列,另一个镜像中序排列,这样来看是不是一样,结果遇到以下例子

我的方法来看确实是镜像的,但是一个是左节点一个是右节点,所以并非镜像!
结果还是求助了deepseek,直接采用递归比较左右子树,妙啊,用一个递归比较左子树的左节点和右子树的右节点,只要不一样直接返回0,妙啊!
class Solution(object):
def isSymmetric(self, root):
"""
:type root: Optional[TreeNode]
:rtype: bool
"""
if not root:
return True
return self.issame(root.left, root.right)
def issame(self, lnode, rnode):
if not lnode and not rnode: # 如果两个节点都为空,则对称
return True
if not lnode or not rnode: # 如果只有一个为空,则不对称
return False
# 检查当前节点的值是否相等,并递归检查左右子树
return (lnode.val == rnode.val and
self.issame(lnode.left, rnode.right) and
self.issame(lnode.right, rnode.left))
逻辑是这样的的,方法的参数是左右节点,先判断左右节点是不是都为空,都为空即为对称,再看是否只有一个,只有一个则不对称。到下面递归的部分,首先左节点和右节点的值要一样,且后面两个and的值参考前两个条件,都没或者只有一个,通过三个and进行计算吗,最后return。
总结反思:
为什么一开始选择两个递归,感觉要判断左右的子树一不一样只要先进行一个中序排列,再看一不一样就行了,但是没想到的是中序并不能完整展示一个树的结构,见上述案例。
为什么没想到在一个递归中实现:对递归的应用还是不熟悉,没想到该return什么数据。

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



