Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/371.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 从数组中删除child的算法_Java_Arrays_Algorithm_Data Structures_Tree - Fatal编程技术网

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