我正在使用递归来查找BST(二进制搜索树)中的最短路径,并且最短路径应该是找到的第一个无子叶。每当我回来时它都会让我回到原点。我已经尝试了很多种方法,我要么继续为rootPointerException取回root。这就是我所拥有的
public int minPath(){
if(isEmpty()){
return -1;
}
else{
return findMin(root);
}
}
private int findMin(IntegerTreeNode tNode){
if((tNode.left != null) && (tNode.right != null)){
findMin(tNode.left);
findMin(tNode.right);
}
return tNode.item;
}
我认为发生的事情是它正在返回堆栈的开头,那么我将如何返回第一个无子叶节点?
答案 0 :(得分:0)
您可以使用广度优先搜索来解决此问题,因为它将找到指向具有未加权边缘的指定目标的最短路径。由于这是BST,因此不应该有加权边,因此BFS将是您选择的算法。
这是一个精彩的演示文稿和伪代码跟进算法:
您的目标状态将只是一个没有任何子节点的节点,因此是一个叶子节点。由于BFS将为您找到达到此目标的最短路径,因此该算法将返回第一个叶节点。
答案 1 :(得分:0)
请注意,您的findMin
方法返回int
,但您正在进行递归调用而根本不使用返回的int
!我建议你在考虑如何利用你的递归调用返回的数字时重新设计你的方法。