【发布时间】:2018-12-27 08:31:45
【问题描述】:
问题要求使用顺序遍历检查树q 和p 是否相同。我的逻辑是:
在检查 p 和 q 的左右时,如果 q 有左/右孩子但 p 没有,则返回 False
检查p和q的值时,如果不相同则返回False
我在示例中找到:(BFS 订单)
p = [1,2,3,5,6]
q = [1,2,3,4,6]
它发现了差异,但仍然返回 True。我有点理解这是因为它只在递归中调用inOrderTraverse(),所以return 命令不会停止递归运行。我尝试在递归部分之前添加return,使其变为return inOrderTraverse()。但是,在这种情况下,一旦访问了所有剩余的孩子,递归就会停止。
所以我真的不知道我还能做些什么改变来让这件事发挥作用。请帮忙,谢谢!
def inOrderTraverse(p, q):
if p.left:
if q.left and p.left.val == q.left.val:
inOrderTraverse(p.left, q.left)
else:
return False
if p.val != q.val:
return False
if p.right:
if q.right and p.right.val == q.right.val:
inOrderTraverse(p.right, q.right)
else:
return False
return True
【问题讨论】:
-
请修正缩进。忽略这一点在任何语言中都是不好的形式,但在 Python 中是不可原谅的。此外,您应该为树添加实际测试用例,而不仅仅是以列表形式描述它们。
-
您忽略了递归调用的返回值。
-
您需要在递归调用结果上使用 return 语句,否则您只是将它们扔掉并通过直通返回
True。