【发布时间】:2015-10-26 04:59:39
【问题描述】:
问题:
令 T 为二叉树。将 Roman 节点定义为 T 中的节点 v,使得 v 的左子树中的后代数与 v 的右子树中的节点数最多相差 5。描述一种用于查找 T 的每个节点 v 的线性时间算法,使得 v 不是罗马节点,但 v 的所有后代都是罗马节点。
到目前为止我所拥有的:
我可以想到O(n^2)(自上而下的方法)解决方案,我将遍历树并检查一个节点是否不是罗马的,然后遍历该节点的后代以检查它们是否都是罗马的。所以,这样我就遍历了每个节点两次。
我假设有一种自下而上的方法,可以在O(n) 中找到所需的节点。
有什么想法吗?
【问题讨论】:
-
这种自下而上的方法称为后序。尝试在每一步计算两件事,例如子树中的节点数,以及是否所有节点都是罗马的。
-
我和@n.m 在一起。 - 在每个节点上是一个额外的
int和一个额外的bool,这可能是可以接受的......
标签: algorithm data-structures tree binary-tree binary-search-tree