如何在Java中计算嵌套数据结构中的叶节点?
我有一个这样的结构,我们称之为Box对象如何在Java中计算嵌套数据结构中的叶节点?,java,algorithm,data-structures,nodes,Java,Algorithm,Data Structures,Nodes,我有一个这样的结构,我们称之为Box对象 Box--+---Box----Box | +---Box-+--Box | +--Box | +--Box 我试图向top box对象询问叶节点框的列表,在本例中是3个box对象 box对象在名为children的Vector类型的实例变量中有其子对象的列表 孩子的数量可以是无限的 我一直在尝试编写一个递归方法来实现这一点,但没
Box--+---Box----Box
|
+---Box-+--Box
|
+--Box
|
+--Box
我试图向top box对象询问叶节点框的列表,在本例中是3个box对象
box对象在名为children的Vector类型的实例变量中有其子对象的列表
孩子的数量可以是无限的
我一直在尝试编写一个递归方法来实现这一点,但没有成功。实现这一点的一种方法是递归遍历结构。其思路如下:
void findChildren (Box current, List<Box> found) {
/* Case 1. */
if (current == null) return;
/* Case 2. */
if (current.children.isEmpty()) {
found.add(current);
return;
}
/* Case 3. */
for (Box child: current.children)
findChildren(child, found);
}
void findChildren(当前框,找到列表){
/*案例1*/
if(current==null)返回;
/*案例2*/
if(current.children.isEmpty()){
找到。添加(当前);
返回;
}
/*案例3*/
用于(框子项:current.children)
findChildren(child,find);
}
希望这有帮助 我已经有一段时间没有使用Java了,所以我确信这段代码有很多语法错误,我希望没有人会因此而给我打分;只是想给你一些算法的想法。希望能有所帮助:
vector<Box> getLeaves(Box root)
{
vector<Box> tempList; //vector to hold nodes to check
vector<Box> tempList2; //vector to hold nodes' children
vector<Box> leafList;
bool goflag = true;
tempList.add(root);
while(goflag){
for(int i = 0; i < tempList.size; i++){
if(tempList[i].children.isEmpty()){
leafList.add(tempList[i]);
}
else{
//add all children to tempList2
for(int c = 0; c < tempList[i].children.size; c++){
tempList2.add(tempList[i].children[c])
}
}
if(tempList2.isEmpty()) //no more childs
goflag = false;
else
tempList = tempList2;
tempList2.clear();
}
return leafList;
}
vector getLeaves(框根)
{
vector tempList;//用于保存要检查的节点的向量
vector tempList2;//用于保存节点子节点的向量
向量叶表;
bool-goflag=true;
添加(根);
while(goflag){
for(int i=0;i
它遍历所有节点,将子节点添加到下一个要检查的列表中,并将叶子添加到要返回的列表中。有几种方法可以编写这样的函数
- 定义一个助手函数,该函数接受一个节点和一个包含节点的可变队列
- 在该helper函数中,检查提供的节点的子节点是否为空。如果为空,请将该节点添加到队列中,然后返回
- 相反,如果提供的节点有任何子节点,则为每个子节点调用一次helper函数,并传递子节点和相同的队列引用
- 在顶层,创建一个空队列,并调用helper函数,传入根节点和队列
- 当helper函数返回时,队列将按照叶的发现顺序包含所有叶
另一种方法使用相同的深度优先遍历,但函数将返回它发现的叶子列表。这些列表需要为每一组探索的同级元素组合起来,在每个函数调用返回时备份树。到目前为止,您有什么?三个长方体对象?不是有四个叶子吗?“在根为r的树中,如果r有子树,那么树的叶子就是这些子树的叶子。"在这种情况下,是的。但我肯定会有根的子代会有子代的情况。我没有-1顺便说一句。那个人应该留下自己的评论。@Nicklamort:这是递归规则,是真的。因为你进入子代,他们会再次应用该规则。Falmari,我理解,但这并不意味着只有子代是“根”的孩子。无论谁投了反对票,我都希望能解释一下为什么这是不正确的。如果我犯了错误,我真的很想知道它是什么;这对我来说似乎是正确的。此外,如果问题是我解释得不好,我想知道如何改进答案,使它更有用。我在这里因为我真的很喜欢帮助别人,如果有什么我能做的可以改进的,我很乐意听你说。是的,这已经足够接近了。当我开始输入这个答案时,我还没有注意到另一个答案。