首页 > 解决方案 > 如何从每个递归调用中获取值并放入单个列表中?

问题描述

给定一个树结构:

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

我希望能够获取递归调用的结果(self.data)

def preOrder(self): 
    if self:
        print(self.data)
        if self.left is not None:
            self.left.preOrder()
        if self.right is not None:
            self.right.preOrder()

并能够在一个列表中返回它们。

在哪里

root= Node(2,Node(1,Node(6),Node(3)),Node(3,None,Node(9)))
root.preOrder()

将产生 [2,1,6,3,3,9]。

我尝试过使用辅助功能,但我被卡住了,无法获得有效的解决方案。

标签: pythonpython-3.xtreetree-traversal

解决方案


class Node:
    def __init__(self, data, left=None, right=None):
        self.left = left
        self.right = right
        self.data = data
    def preOrder(self, result = None): 
        if result is None:
            result = []
        if self:
            result.append(self.data)
            if self.left is not None:
                self.left.preOrder(result)
            if self.right is not None:
                self.right.preOrder(result)
        print(result)        
        return result

root= Node(2,Node(1,Node(6),Node(3)),Node(3,None,Node(9)))
root.preOrder()

而不是打印附加到列表并将该列表再次发送到相同的函数。继续附加它并在最后返回。


推荐阅读