一尘不染

Java算法,用于查找二叉树中最大的独立节点集

algorithm

通过独立节点,我的意思是返回的集合不能包含有直接关系的节点,不能同时包含父项和子项。我尝试使用Google,但没有成功。我认为搜寻字词不正确。

一个链接,任何帮助将不胜感激。现在刚刚开始。

我需要返回实际的独立节点集,而不仅仅是数量。


阅读 336

收藏
2020-07-28

共1个答案

一尘不染

您可以使用动态编程(记忆)来计算此递归函数:

MaxSet(node) = 1 if "node" is a leaf
MaxSet(node) = Max(1 + Sum{ i=0..3: MaxSet(node.Grandchildren[i]) },  
                       Sum{ i=0..1: MaxSet(node.Children[i])      })

这个想法是,您可以选择一个节点,也可以选择不选择它。如果选择它,则不能选择其直接子代,但可以从其子代中选择最大的子集。如果您不选择它,则可以从直接子代中选择最大集合。

如果需要集合本身,则只需存储如何为每个节点选择“最大”。它类似于LCS算法

该算法为O(n)。它一般适用于树,而不仅仅是二叉树。

2020-07-28