【问题标题】:Search a node in array of children nodes in n-ary tree在 n 叉树的子节点数组中搜索一个节点
【发布时间】:2021-10-12 21:30:10
【问题描述】:

我在 2 周后就被这个问题困住了。

我在 Python 中有一个基本的树节点类:

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 函数的每个“数据”的第一次出现时进行搜索。

我总是传递根节点,然后是标识我正在寻找的节点的字符串。

真的把我的头撞到墙上了。

【问题讨论】:

  • 它返回无
  • 什么是数据类型?字符串?诠释?也许你应该使用 is 而不是 ==
  • 这是一个简单的字符串。我会试一试,泰。没有。没有解决。
  • 您确定正确添加了孩子吗?好像你没有 add_child 功能
  • 您不需要add_child 函数,您只需node.children.append(child)

标签: python tree recursive-datastructures


【解决方案1】:

您的代码中有两个问题,第一个是如果函数被递归调用,您没有返回节点。第二个是,如果您只使用return find_node(child, data),该函数将在第一次传递时返回,但您只想在递归函数中找到一个节点时返回。所以你必须改变

find_node(child, data)

类似的东西

potNode = find_node(child, data)
if not potNode is None:
    return potNode

【讨论】:

  • 太好了,我明白了,现在它可以工作了,我稍微调整了一下你的 if 更简单的:```potNode = find_node(child, data) if potNode: return potNode ``` 而且它似乎工作正常。非常感谢你
  • @DarioWoollover,然后您应该将此答案标记为已接受。
猜你喜欢
  • 2015-08-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-09-26
  • 2021-03-11
  • 1970-01-01
  • 2012-01-07
相关资源
最近更新 更多