该问题要求用于遍历以检查树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
答案 0 :(得分:2)
如注释中所述,除了忽略对<!DOCTYPE html>
<html>
<head>
</head>
<body>
<div id="box_1"></div>
<div id="box_2"></div>
</body>
</html>
的递归调用的返回值外,您似乎还缺少inOrderTraverse()
存在但q.left
不存在的情况(同上对)。这是我对代码的重做,以解决以下两个问题:
p.left
答案 1 :(得分:1)
除了返回递归值外,还可以简化逻辑:
def areEqual(p, q):
return bool(p) == bool(q) and (p is None or areEqual(p.left, q.left) and p.val == q.val and areEqual(p.right, q.right))