gpt4 book ai didi

java - 让所有子节点处于二叉树的同一层

转载 作者:行者123 更新时间:2023-11-30 06:09:57 26 4
gpt4 key购买 nike

我想在树的同一级别上显示所有子级。所以如果我有一棵这样的树:

            A
B C D
E F G H I J

例如,级别 3 将返回 E、F、G、H、I 和 J 节点。我在 TreeNode 类中有一个方法,它返回给定节点的所有子节点,所以我考虑做这样的事情:

static Collection<ITreeNode<IProduct>> getOnLevel(ITree<IProduct> tree, int level)
{
Collection<ITreeNode<IProduct>> temp;
int i;
Iterator<ITreeNode<IProduct>> iterator = tree.getRoot().getChildren().iterator();
for(i=0; i<=(level); i++)
{
while(iterator.hasNext())
{
ITreeNode<IProduct> elem = iterator.next();
if(i == (level))
{
temp = elem.getChildren();
return temp;
}
}
}
return tree.getRoot().getChildren();

}

但后来我意识到我只是迭代第一级子级,所以我可能必须以某种方式递归地执行此操作?预先感谢,阿马尔!

最佳答案

您可以递归地执行,也可以通过迭代执行,这取决于您。

我发现递归解决方案更容易阅读。它看起来像这样:

static Collection<ITreeNode<IProduct>> getOnLevel(
ITree<IProduct> tree
, int desiredLevel
) {
List<ITreeNode<IProduct>> result = new ArrayList<>();
findOneLevel(tree.getRoot(), desiredLevel, 0, result);
return result;
}

static void findOnLevel(
ITreeNode<IProduct> node
, int desiredLevel
, int currentLevel
, List<ITreeNode<IProduct>> result
) {
if (currentLevel == desiredLevel) {
result.add(node);
return;
}
Iterator<ITreeNode<IProduct>> iterator = node.getChildren().iterator();
while(iterator.hasNext()) {
findOnLevel(iterator.next(), desiredLevel, currentLevel+1, result);
}
}

该方法非常简单:顶级方法创建一个列表来存储结果,并调用递归findOnLevel。递归方法检查我们是否达到了所需的级别,如果达到则将当前节点添加到结果中。否则,我们将在递归调用中遍历当前节点的所有子节点,并传递 currentLevel+1 作为新的当前级别。

关于java - 让所有子节点处于二叉树的同一层,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50474915/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com