Java 从数组中删除child的算法
我必须为我的项目写一个Java 从数组中删除child的算法,java,arrays,algorithm,data-structures,tree,Java,Arrays,Algorithm,Data Structures,Tree,我必须为我的项目写一个算法。以下是问题 一种树状结构,只有一个功能公开,即**getAllChildNodes**,返回特定节点的所有子节点。 现在给我一个节点数组,我只需要保留其中最上面的父节点 例如:假设有3棵树 Tree 1 : P1 has two children C11 & C12 Tree 2 : P2 has 1 children C21, and C21 has 2 child C22, C23 Tree 3 : P3 has 2 Children C31 and
算法。以下是问题
一种树状结构,只有一个功能公开,即**getAllChildNodes**
,返回特定节点的所有子节点。
现在给我一个节点数组,我只需要保留其中最上面的父节点
例如:假设有3棵树
Tree 1 : P1 has two children C11 & C12
Tree 2 : P2 has 1 children C21, and C21 has 2 child C22, C23
Tree 3 : P3 has 2 Children C31 and C32
Now if given an array say { C11, C21, C22 , P1, P3, C32}
The expected result is { C21, P1 , P3 }
如果需要我方提供更多信息,请告诉我
更多信息:
我首先得到数组第一个元素的所有子元素,然后与数组的其余元素进行比较,同样地,与每个元素进行比较。但这更为复杂。。i、 e n*n*getAllChildNodes。我在这里是为了一个更好的建议选择数组的第I个元素并将其所有子元素添加到hashmap(使用给定的函数)。在i 1到n之间执行此操作(完全通过)
循环1到n,对于每个迭代,检查元素是否存在于hashmap中
如果存在,请将其从数组中删除
否则继续
注意,检查元素是否属于hashmap的顺序是O(1),加法的顺序也是O(1),average。所以算法是O(n*getAllChlidNodes)平均值你可以很容易地做到这一点。
首先创建一个方法isPresent(node)
,检查您输入的节点是否存在于数组中。然后输入给定的每个节点以查找其父节点
if(isPresent(x->parent)) push(x->parent);
对整个列表继续此操作。
现在,以递归方式检查当前列表是否有父列表
。一旦你开始做,你就会得到它。如果有任何父元素,只需pop()
这些元素即可。
希望这有帮助:)如果您可以先获得一个函数,如getParentNode(childNode),或者创建子对象的映射/多重映射作为键,父对象作为值作为预处理步骤,那么问题将变得非常简单
如果您有getParentNode(childNode),那么只需遍历数组并将父节点推入集合
如果您将子元素的map/multimap作为键,将父元素作为值作为预处理步骤,然后应用中提到的算法,我尝试先获取数组第一个元素的所有子元素,然后与数组的其余元素进行比较,但这会更复杂。。i、 e nngetAllChildNodes。我在这里是为了一个更好的建议,你能得到另一个函数,比如getParentNode(childNode)吗?如果你能得到它,那么只需要所有子节点的父子节点并简单地删除重复。没有这样的方法,你需要完成完整的PASS,顺序是相同的,O(NK)+O(NK)=O(NK),但是我认为你忘记了在算法中考虑它,所以它是不正确的。是吗?是的,这取决于实现,但请阅读问题,它清楚地说明只公开了一个函数。如果有其他问题,请留下评论。否则,如果您接受答案,我们将不胜感激。根据我从问题中推断,算法的主要目的不是使用诸如查找父项之类的自定义函数。问题是只显示getAllChildNodes。很抱歉,我没有任何函数来获取ParentNode