在树ds中有序遍历时递归函数失败

时间:2018-06-25 17:51:15

标签: python data-structures tree

我正在尝试实现树数据结构,但遇到困难,无法理解如何为我的二叉树创建用于顺序遍历的递归函数。

这是我到目前为止所做的:

class Node:
    def __init__(self, node):
        self.node = node
        self.left = None
        self.right= None



    def inorder_traversal(self):
        if self.node != None:
            return inorder_traversal(self.node.left)
            return self.node
            return inorder_traversal(self.node.right)

我似乎不明白怎么了。

测试输入:

root = Node(1)
root.left = Node(3)
root.right = Node(4)

错误:

File "trees-implementation.py", line 23, in inorder_traversal
    return inorder_traversal(self.node.left)
NameError: name 'inorder_traversal' is not defined

2 个答案:

答案 0 :(得分:2)

似乎您已经针对Node定义了遍历函数。你能理解这个吗?

您应该针对树而不是节点定义遍历。节点不知道它属于树,它是一个愚蠢的对象。

定义节点。

class Node:
    def __init__(self, value):
        self.value = value
        self.left = None
        self.right= None

定义树。还要在这里定义遍历方法。

class Tree:
    def __init__(self, root=None):
        self.root = root

    def inorder_traversal(self):
        def _inorder(root):
            if root != None:
                yield from _inorder(root.left)
                yield root.value
                yield from _inorder(root.right)

        return list(_inorder(self.root))

从根开始初始化树,然后遍历它。

tree = Tree(root)
tree.inorder_traversal()
[3, 1, 4]

答案 1 :(得分:0)

首先,可以检查一下是否有对象时,是否未在

中放置参数。
  

root = Node()

那么您确定您的inorder_traversal()函数中可以有多个返回值吗? 最后,该函数位于Node()类中,因此,如果调用它,请尝试添加self.yourfunction