我正在做一些考试修订,并在过去的试卷上发现了这个问题:
首先,有人会实现这样的树吗?还是仅仅是考试问题?
其次,我对如何解决这个问题感到非常困惑。我想使用BFS或DFS,但它们仅适用于二叉树,而我对递归并不满意,因此也很难在其中使用。
我想出了这个可行的方法,但它确实很难看,在一般情况下,仅适用于这棵特定的树,是不可行的:
values_2017 %>%
left_join(meta) %>%
full_join(values_2014, by = "country_iso")
#> Joining, by = "country"
#> # A tibble: 3 x 6
#> country fit.x year.x country_iso year.y fit.y
#> <chr> <dbl> <chr> <chr> <chr> <dbl>
#> 1 Afghanistan 1.57 2017 AFG 2014 1.42
#> 2 Angola -1.69 2017 AGO 2014 -0.890
#> 3 Albania 0.866 2017 ALB 2014 0.163
values_2017 %>%
left_join(meta) %>%
left_join(values_2014, by = "country_iso")
#> Joining, by = "country"
#> # A tibble: 3 x 6
#> country fit.x year.x country_iso year.y fit.y
#> <chr> <dbl> <chr> <chr> <chr> <dbl>
#> 1 Afghanistan 1.57 2017 AFG 2014 1.42
#> 2 Angola -1.69 2017 AGO 2014 -0.890
#> 3 Albania 0.866 2017 ALB 2014 0.163
正如我在考试修订前所说的那样,任何帮助都将是很大的,而不是家庭作业。谢谢
答案 0 :(得分:1)
这类问题可以通过递归解决:
public ArrayList<Integer> getLeafValues() {
ArrayList<Integer> leafList = new ArrayList<>();
getLeaves (this, leafList);
return leafList;
}
public void getLeaves (Tree current, List<Integer> leafList)
{
if (current.children.isEmpty()) {
leafList.add(current.data);
} else {
for (Tree t : current.children) {
getLeaves (t, leafList);
}
}
}
当您到达叶子(即没有子树的树)时,递归结束,在这种情况下,您将该叶子添加到List
中。
如果当前节点有子节点,则对所有子节点递归调用该方法,以收集其子树的叶子。