Python中的后序通用树遍历

Python中的后序通用树遍历,python,tree,nodes,postorder,Python,Tree,Nodes,Postorder,是否可以使用Python以后序方式遍历常规树(即具有多个子树)。基本上,我想从树的左下角向上遍历一棵树,并将每个节点.size与其父节点.size进行比较。根据哪个节点最大,如果子节点较大,我将节点.max\u size更改为子节点的.size。根将始终具有存储在其中的树中最大的值 我的问题:有没有一种方法可以按后序遍历通用树(例如:E、F、B、C、D、a)?如果是这样的话,怎么做呢?不知道为什么需要尺码。您可以这样做: [254]中的:类节点: …:def_uuuinit_uuuu(self

是否可以使用Python以后序方式遍历常规树(即具有多个子树)。基本上,我想从树的左下角向上遍历一棵树,并将每个节点
.size
与其父节点
.size
进行比较。根据哪个节点最大,如果子节点较大,我将节点
.max\u size
更改为子节点的
.size
。根将始终具有存储在其中的树中最大的值


我的问题:有没有一种方法可以按后序遍历通用树(例如:
E、F、B、C、D、a
)?如果是这样的话,怎么做呢?

不知道为什么需要尺码。您可以这样做:

[254]中的
:类节点:
…:def_uuuinit_uuuu(self,val:str):
…:self.val=val
…:self.children=[]
...:
在[255]中:A=节点('A')
在[256]中:B=节点('B')
在[257]中:C=节点('C')
在[258]中:D=节点('D')
在[259]中:E=节点('E')
在[260]中:F=节点('F')
在[261]中:A.儿童=[B,C,D]
在[262]中:B.儿童=[E,F]
在[263]中:根=A
#一般的post顺序,但迭代子级,而不是执行左/右操作
在[264]中:def post_顺序(根:节点):
…:如果root不是None:
…:对于root.children中的子项:
…:邮政订单(儿童)
…:打印(root.val)
...:
在[265]中:邮政订单(A)
E
F
B
C
D
A.

不确定为什么需要尺码。您可以这样做:

[254]中的
:类节点:
…:def_uuuinit_uuuu(self,val:str):
…:self.val=val
…:self.children=[]
...:
在[255]中:A=节点('A')
在[256]中:B=节点('B')
在[257]中:C=节点('C')
在[258]中:D=节点('D')
在[259]中:E=节点('E')
在[260]中:F=节点('F')
在[261]中:A.儿童=[B,C,D]
在[262]中:B.儿童=[E,F]
在[263]中:根=A
#一般的post顺序,但迭代子级,而不是执行左/右操作
在[264]中:def post_顺序(根:节点):
…:如果root不是None:
…:对于root.children中的子项:
…:邮政订单(儿童)
…:打印(root.val)
...:
在[265]中:邮政订单(A)
E
F
B
C
D
A.

您可以递归地执行

def updateNodeSize(node):
    if 'children' not in node:
        if 'size' in node:
            return node['size']
        return 0

    maxSize = 0
    for child in node['children']:
        maxSize = max(maxSize, updateNodeSize(child))
    node['size'] = maxSize
    return maxSize


updateNodeSize(root)

您可以递归地执行此操作:

def updateNodeSize(node):
    if 'children' not in node:
        if 'size' in node:
            return node['size']
        return 0

    maxSize = 0
    for child in node['children']:
        maxSize = max(maxSize, updateNodeSize(child))
    node['size'] = maxSize
    return maxSize


updateNodeSize(root)

子项将是一个数组,而不是一般的“左”和“右”,但是可以。子项将是一个数组,而不是一般的“左”和“右”,但是可以。