我已经实现了一个函数来查找二叉搜索树中节点的深度,但是我的实现没有处理重复。我在下面有我的代码,并想了解如何在此函数中考虑重复案例的一些建议。 WOuld真的很感谢你的帮助。
public int depth(Node n) {
int result=0;
if(n == null || n == getRoot())
return 0;
return (result = depth(getRoot(), n, result));
}
public int depth(Node temp, Node n, int result) {
int cmp = n.getData().compareTo(temp.getData());
if(cmp == 0) {
int x = result;
return x;
}
else if(cmp < 0) {
return depth(temp.getLeftChild(), n, ++result);
}
else {
return depth(temp.getRightChild(), n, ++result);
}
}
答案 0 :(得分:0)
好吧,如果有重复,那么具有给定值的节点的深度本身没有任何意义,因为可能有多个节点具有该值,因此有多个深度。
你必须决定它的意思,这可能是(不一定是详尽的清单):
任何在特定情况下都有意义。
当然,如果n
是指向节点的实际指针,则根本不应该比较节点的值,您应该比较指针。这样,您将只能找到一个匹配,并且它的深度是有意义的。
以下伪代码应该执行以下操作:
def getDepth (Node needle, Node haystack, int value):
// Gone beyond leaf, it's not in tree
if haystack == NULL: return -1
// Pointers equal, you've found it.
if needle == haystack: return value
// Data not equal search either left or right subtree.
if needle.data < haystack.data:
return getDepth (needle, haystack.left, value + 1)
if needle.data > haystack.data:
return getDepth (needle, haystack.right, value + 1)
// Data equal, need to search BOTH subtrees.
tryDepth = getDepth (needle, haystack.left, value + 1)
if trydepth == -1:
tryDepth = getDepth (needle, haystack.right, value + 1)
return trydepth
当值相等时,您必须搜索两个子树的原因是因为所需节点可能位于任一子树中。在值不相等的情况下,您知道它在哪个子树中。因此,对于它们相等的情况,您检查一个子树,如果没有找到,则检查另一个子树。
答案 1 :(得分:0)
在您显示的代码中,无法选择具有相同值的一个节点而不是另一个节点。你需要有一些区分标准。 您可以使用以下方法检索所有重复节点深度的列表,例如: