考虑一个树(无序),其中节点标记为0到n,根节点始终标记为0.
我想构建一个单独的树,其中每个非根节点m的父节点是其最接近的祖先,标签小于m。
例如,给定这棵树:
所需的输出是:
请注意,节点2的标签小于其父5,因此它向上移动树;节点4小于其父7及其祖父母5,因此它向上移动树到其曾祖父母0。
天真的方法是独立处理每个节点,向上遍历直到我们遇到较低的标签。对于以下情况,这会变得非常昂贵:
感觉应该有一个相当简单的次二次算法来处理这样的重排,但是我不能制定正确的混合物,甚至找不到明显的遍历顺序来最小化冗余处理量。这是一个定义明确的解决方案的常见问题吗?
答案 0 :(得分:1)
算法将如下:
递归注入(node,parent):