python - Python中的后序通用树遍历
问题描述
是否可以使用 Python 以后序方式遍历一般树(即具有多个子节点的树)。本质上,我想从树的左下角向上遍历一棵树,并将每个节点.size
与其父节点进行比较.size
,以确定哪个节点最大,如果孩子更大,我将节点更改.max_size
为孩子的.size
. 根将始终具有存储在其中的树中最大的值。
我的问题:有没有办法按后序遍历一般树(对于这个例子:)E, F, B, C, D, A
?如果是这样,这样做的方法是什么?
解决方案
不知道为什么你需要大小的东西。你可以这样做:
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
推荐阅读
- flutter - 为什么颤振约束没有通过小部件树向下推?
- php - 即使在检查 API 密钥和注册域后,仍会出现错误“此域未在微型云中注册”
- loops - 使用 NA 的 R 进行循环股票价格回归
- salesforce - SalesForce 对象:Restapi 可见性
- docker - docker错误下使用NodeRed的RPi GPIO控制?
- concurrency - Rust 缓存异步特征
- laravel - 为什么 Laravel-livewire 'wire:model' 不起作用?
- php - php通过两个属性过滤json数组
- python - 使用 Xgboost 进行非线性回归
- python-3.x - 删除场景中选定的 QGraphicsPixmapItem