我正在准备面试,我遇到了这个问题:
给定树结构的根。 getChildren()方法返回Node []数组,该数组包含该父项的所有子项。问题是检查给定的节点x是否在树中退出。我将如何以迭代和递归方式执行此操作?有人可以为它提供伪代码。我知道我们可以进行深度优先搜索,但我不知道如何为每个元素可以包含任意数量的子节点的树执行此操作。
答案 0 :(得分:0)
您的递归方法可能如下所示
FUNCTION exists(Node target, Node root):
Node[] children = root.getChildren()
IF children NOT null: //if there are children go on to visit each one
FOR child IN children:
IF exists(target,child):
RETURN true
ELSE: //the base case, when 'root' has no children check if it's the value
RETURN root.value == target
RETURN false //will only be reached from the first call to exists() if there hasn't been a match already
在Python中,这看起来像:
def exists(target,root):
if isinstance(root,list):
for child in root:
if exists(target,child):
return True
else:
return target == root
return False
一些例子:
print exists(2,[[[2]]])
print exists(2,[[1,4,5,[2]]])
print exists(2,[0,0,0,[0,[1,1,1]]])
>>>
True
True
False
python中的迭代将是
def existsNR(value,root):
visitstack = [child for child in root]
while visitstack:
node = visitstack.pop()
if isinstance(node,list):
visitstack += node
else:
if node == value:
return True
return False
这背后的逻辑是,你会检查每个有孩子的孩子,然后为每个有孩子的孩子,然后将孩子推到堆叠上,并移除父母和孩子。 #39;那些孩子(孩子)。为孩子检查这些并以类似的方式添加它们......直到你找到一个没有孩子的那个,你检查是否相等。