我在做什么 ?
我正在 coursera 上开设一门课程,该课程要求我编写一个计算树高的程序。输入是一个父数组,其中每个索引都是节点,其值是节点的父节点。如果节点是根节点,它的值将为 -1。
到目前为止我做了什么?
我编写了一个算法,通过递归遍历其子节点直到其根节点并将中间子节点的高度保存在数组(深度变量)中来检查树的高度。
为了摆脱这个异常,我尝试为我的递归调用找到最佳值,结果它接近3100k。此外,当我看到针对一些预定义测试用例测试我的算法的代码也已将1 << 26 的堆栈大小传递到线程构造函数中。
我需要知道什么?
有没有更好的方法来解决这个问题?
像这样增加堆栈大小可以吗?
这是代码
int computeHeight() {
int[] depth = new int[n];
int maxHeight = 0;
for (int i = 0; i < n; i++) {
int height = computeHeight(parent, depth, i);
maxHeight = Math.max(height, maxHeight);
}
return maxHeight;
}
private int computeHeight(int[] parent, int[] depth, int idx) {
if (parent[idx] == -1) {
// root found
depth[idx] = 1;
return depth[idx];
}
// depth of parent unknown
if (depth[parent[idx]] == 0) {
computeHeight(parent, depth, parent[idx]);
}
depth[idx] = depth[parent[idx]] + 1;
return depth[idx];
}
跃然一笑
守着一只汪
MMMHUHU
相关分类