【问题标题】:post order general tree traversal in PythonPython中的后序通用树遍历
【发布时间】:2021-04-09 04:31:06
【问题描述】:

是否可以使用 Python 以后序方式遍历一般树(即具有多个子节点的树)。本质上,我想从树的左下角向上遍历一棵树,并将每个节点.size 与其父节点.size 比较哪个最大,如果孩子更大,我改变节点.max_size 到孩子的.size。根将始终具有存储在其中的树中最大的值。

我的问题:有没有办法按后序遍历一般树(例如:E, F, B, C, D, A)?如果是这样,这样做的方法是什么?

【问题讨论】:

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

标签: python tree nodes postorder


【解决方案1】:

不知道你为什么需要尺寸的东西。你可以这样做:

In [254]: class Node:
     ...:     def __init__(self, val: str):
     ...:         self.val = val
     ...:         self.children = []
     ...:

In [255]: A = Node('A')
In [256]: B = Node('B')
In [257]: C = Node('C')
In [258]: D = Node('D')
In [259]: E = Node('E')
In [260]: F = Node('F')
In [261]: A.children = [B,C,D]
In [262]: B.children = [E,F]
In [263]: root = A
# General post order but iterating over the children instead of doing left/right
In [264]: def post_order(root: Node):
     ...:     if root is not None:
     ...:         for child in root.children:
     ...:             post_order(child)
     ...:         print(root.val)
     ...:

In [265]: post_order(A)
E
F
B
C
D
A

【讨论】:

    【解决方案2】:

    您可以递归地

    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)
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2019-07-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-05-28
      • 1970-01-01
      相关资源
      最近更新 更多