在 n 叉树的子节点数组中搜索一个节点
Search a node in array of children nodes in n-ary tree
我已经解决了这个问题 2 周了。
我在 Python 中有一个基本的树节点 class:
class Node:
def __init__(self, data):
self.data= data
self.children = []
self.parent = None
然后我有一个通用的递归搜索函数:
def find_node(node, data):
if node.data == data:
return node
if len(node.children)>0:
for child in node.children:
find_node(child, data)
我不明白为什么 Python 只在我传递给 find_node 函数的每个“数据”的第一次出现时搜索。
我总是传递根节点,然后传递标识我要查找的节点的字符串。
真是用头撞墙
您的代码中有两个问题,第一个是如果函数被递归调用,您没有 returning 节点。第二个是如果你只使用 return find_node(child, data)
函数将在第一次传递时 return 但你只想 return 如果在递归函数中找到节点。因此你必须改变
find_node(child, data)
类似
potNode = find_node(child, data)
if not potNode is None:
return potNode
我已经解决了这个问题 2 周了。
我在 Python 中有一个基本的树节点 class:
class Node:
def __init__(self, data):
self.data= data
self.children = []
self.parent = None
然后我有一个通用的递归搜索函数:
def find_node(node, data):
if node.data == data:
return node
if len(node.children)>0:
for child in node.children:
find_node(child, data)
我不明白为什么 Python 只在我传递给 find_node 函数的每个“数据”的第一次出现时搜索。
我总是传递根节点,然后传递标识我要查找的节点的字符串。
真是用头撞墙
您的代码中有两个问题,第一个是如果函数被递归调用,您没有 returning 节点。第二个是如果你只使用 return find_node(child, data)
函数将在第一次传递时 return 但你只想 return 如果在递归函数中找到节点。因此你必须改变
find_node(child, data)
类似
potNode = find_node(child, data)
if not potNode is None:
return potNode