【问题标题】:Python Ordered List Preorder Tree TraversalPython有序列表前序树遍历
【发布时间】:2015-10-25 18:59:46
【问题描述】:

我是 python 新手,正在尝试返回有序树的预排序列表(注意:不是二叉树)。在递归到达树的叶子后,我遇到了一些麻烦。如何让它回到上一个节点?到目前为止,这是我的代码:

def OrdPreOrder(T):
    if Is_OrdLeaf(T):
        return []
    else:
        for t in Subtrees(T):
            return [OrdRoot(t)] + OrdPreOrder(t)

提前致谢,

【问题讨论】:

  • 有趣的问题,但您的问题缺少一个基本要素:示例输入/输出。请read this 并更新提供的信息。
  • 关于how do I get it to go back up to the previous node? 的简短说明:递归为您做这件事。我假设你知道pre-order visits the tree(即当前节点,然后是子节点)
  • 据我所知,您的代码对叶节点没有任何作用。通常,您会检查树(即T)是否为空(例如None),如果是则返回。如果不是,请对节点内容进行处理,然后访问子/子树。
  • 你应该阅读 PEP8,并使用 pylint 来检查你的代码,这里,通常情况下,T 不应该大写,而且太短(我们不知道它是什么,这不是告诉我们)。虽然不会解决你的问题。就像@Pynchia 说的,我们想要一个示例输入和输出:)

标签: python recursion tree


【解决方案1】:

这个问题对我来说不是很清楚,但希望这会有所帮助。 您想要对有序树进行前序遍历。 预购遍历方式 1.首先打印节点中存储的值 2.然后打印children中存储的值(根据一些原理) 首先,

如何让它回到上一个节点?

根据我上面写的前序遍历的定义,我不明白你为什么需要返回并重新访问父节点。

class Node:
    def __init__(self, data):
        self.__data = data
        self.__children = []

    def identifier(self):
        return self.__data

    def children(self):
        return self.__children

    def add_child(self, data):
        self.__children.append(data)

class Tree:
    def __init__(self):
        self.__nodes = {}

    def nodes(self):
        return self.__nodes

    def add_node(self, data, parent=None):
        node = Node(data)
        self[data] = node

        if parent is not None:
            self[parent].add_child(data)

        return node

    def traversal(tree):
        if tree == None:
            return
        print (tree.identifier())
        for child in tree.children():
            traversal(child)

我也不太熟悉 Python 中的数据结构(代码中可能存在错误)。但希望它可以为您指明正确的方向。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-03-14
    • 1970-01-01
    • 1970-01-01
    • 2021-03-08
    • 1970-01-01
    • 2018-08-10
    相关资源
    最近更新 更多