嗨,我正试图为大学学习python,但似乎无法摆脱它。我写了这篇文章,我知道有错误,但我真的不明白。如果有人能帮我,非常感谢!(我已经很高兴它至少打印了一些东西(——对不起!来自leetcode的练习陈述如下:给定一个二叉树的根,检查它是否是自己的镜像(即,围绕其中心对称(
class Tree:
def __init__(self, root = None, lc = None, rc = None):
self.root = root
self.lc = lc
self.rc = rc
if root is not None:
if lc is not None:
self.lc = Tree()
if rc is not None:
self.rc = Tree()
def isempty(self):
return self.root is None
def lsym(t):
return (t.root, t.lc.lsym(), t.rc)
def rsym(t):
return (t.root, t.rc.rsym(), t.lc)
def getlabel(self):
return self.root
def mirror(t):
if t.lc is None and t.rc is None:
return True
elif t.lc.lsym == t.rc.rsym:
return True
else:
return False
def isSame(t):
if t.lc is not None and t.rc is not None:
if t.lc.getlabel != t.rc.getlabel :
return False
if t.lc.lc.isSame and t.rc.rc.isSame:
return False
if t.lc.rc.isSame and t.rc.lc.isSame:
return False
else:
return False
l = Tree(1, Tree(2, 3, 4), Tree(2, 4, 3))
print(l.isSame())
因为到目前为止,您没有给我们任何目标,我只能指出一般的编程错误:
def isSame(t):
if t.lc is not None and t.rc is not None:
if t.lc.getlabel != t.rc.getlabel :
return False
if t.lc.lc.isSame and t.rc.rc.isSame:
return False
if t.lc.rc.isSame and t.rc.lc.isSame:
return False
else:
return False
t.lc.getlabel != t.rc.getlabel
很可能是t.lc.getlabel() != t.rc.getlabel()
,因为比较这样的函数没有意义,我假设您想比较它们返回的标签- 与
isSame
相同
I假设isSame
正试图找出两个子树是否相同。(注意:这是你问题描述中的一些内容,这不是我必须做出的假设(
我进一步假设这是我应该查看的唯一函数,因为这是您实际使用的唯一函数。再说一遍,应该在你的描述中。
所以还有更多的问题:
- 您的两个
isSame
if语句完全相同,并且没有按照您的意愿执行。if t.lc.lc.isSame() and t.rc.rc.isSame()
与if t.lc.rc.isSame() and t.rc.lc.isSame()
完全相同,它们只是翻转而已。两者都检查左孩子是否对称(这可能不是你想要的(,然后检查右孩子是否对称。你可能想比较一下升降机的孩子是否与正确的孩子相同,但这并不是目的。但是,我不得不再次假设,请在你的问题中具体说明它应该做什么
进一步挑剔:
self
名称几乎是python中的标准名称,请不要使用t
。这令人困惑。坚持使用self
isSame
是一个用于检查内部对称性的奇怪名称,这表明您正在将其与另一棵树进行比较。我会称之为isSymmetric
或类似的
我不会提供实际的";改进的实施";就像我通常做的那样,因为我不会基于假设去做。请给你的问题增加更多的细节。