python-如何使用顺序遍历比较树

时间:2018-12-26 23:41:46

标签: python recursion

该问题要求用于遍历以检查树qp是否相同。我的逻辑是:

  1. 在检查p和q的左右时,如果q有左/右子但p没有一个,则返回False

  2. 在检查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

2 个答案:

答案 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))