【发布时间】:2015-04-08 18:26:52
【问题描述】:
这是家庭作业,请勿发布代码。请和谢谢。
我受命创建一种计算 BST 中特定深度的方法。
为此,我要@Override 一个方法public int depth(T data)。所以,要递归地找到它,我需要创建一个辅助方法。
我知道我需要在树中搜索包含我正在寻找的数据的节点。因此,为此,我编写了以下代码:
@Override
public int depth(T data) {
if (data == null) {
throw new IllegalArgumentException("Data is null");
}
if (compare(data, root.getData()) == 0) {
return 1;
} else {
return countNodes(search(root, data), data);
}
}
private int countNodes(BSTNode<T> node, T data) {
int depth = 1;
if (node == null) {
return 0;
} else {
if (compare(data, node.getData()) == 0) {
return depth;
} else if (compare(data, node.getData()) < 0) {
return countNodes(node.getLeft(), data);
} else {
return countNodes(node.getRight(), data);
}
}
}
private int compare(T a, T b) {
return a.compareTo(b);
}
但是,这是行不通的,因为每次进行递归调用时,depth 将保持为1;本质上,它正在重置深度的值。我不知道如何在调用之间保持depth 的值。
【问题讨论】:
-
将 int depth 作为 Reference Integer 变量传递给 countNodes 并在顶部的 node == null else 部分内递增。
-
你想要每个节点的深度或树的最大深度!!!
-
给定一个节点,我需要沿着树向下运行到该节点。深度应该是它拥有的祖先节点的数量。 @shazin 我试过了——但引用整数必须是 Object 类型,不是吗?我无法让它工作。
标签: java recursion binary-search-tree depth