在过去的几天里,我一直在与树木和蟒蛇作斗争。大多数情况下,树中的递归给我带来了麻烦。我要解决的问题是在二叉树中找到第一个共同祖先。有很多解决方案声称已经做到了这一点,但它们都是针对二叉搜索树的,而不是二叉树。在二叉树的情况下,节点没有排序,所以左边小于右边。我知道我应该使用哪种方法,但我在递归部分失败了:(编辑:问题表明我不能使用额外的数据结构或存储)
class Node:
"""docstring for Node"""
def __init__(self, data):
self.data = data
self.left=None
self.right=None
def findNode(self,target):
if self==None:
return 0
if self.data==target:
return 1
return self.findNode(self.left,target) or self.findNode(self.right,target)
def firstCommonAncestor(self,p,q):
if self==None:
return 0
if self.left.data==p and self.right.data==q:
return self.data
if findNode(self.left,p) and findNode(self.right,q):
return 1
root=Node(2)
root.left=Node(5)
root.right=Node(4)
root.left.left=Node(9)
root.left.right=Node(7)
print firstCommonAncestor(root,9,7)
我编辑了代码以使问题更清楚。findNode(self.left,p) 和 findNode(self.right,q) 应该返回 1,因为两个节点都存在。但是,当 findNode(self.right,q) 没有从根开始搜索时。我知道我应该实现递归调用,但我尝试过的一切都失败了。如果有人可以提供一些关于我做错了什么的指示,将不胜感激!(第一个CommonAncestor 还没有实现,所以这并不重要。它现在没有做太多)。编辑:这是破解编码面试的一个问题。