我正在尝试实现树数据结构,但遇到困难,无法理解如何为我的二叉树创建用于顺序遍历的递归函数。
这是我到目前为止所做的:
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
答案 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