Java 二叉搜索树中叶子的最短路径

Java 二叉搜索树中叶子的最短路径,java,binary-search-tree,Java,Binary Search Tree,我使用递归在BST(二进制搜索树)中查找最短路径,最短路径应该是找到的第一个无子叶。每当我回来,它都会把根还给我。我已经尝试了许多不同的方法,我要么继续为nullPointerException获取根。这是我的 public int minPath(){ if(isEmpty()){ return -1; } else{ return findMin(root); } } private int find

我使用递归在BST(二进制搜索树)中查找最短路径,最短路径应该是找到的第一个无子叶。每当我回来,它都会把根还给我。我已经尝试了许多不同的方法,我要么继续为nullPointerException获取根。这是我的

     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;
 }

我认为它正在返回堆栈的开头,因此如何返回第一个无子叶节点?

您可以使用广度优先搜索来解决此问题,因为它将查找到具有未加权边的指定目标的最短路径。因为这是一个BST,所以不应该有加权边,所以BFS将是您在此选择的算法

下面是该算法的精彩演示和伪代码后续:


您的目标状态将只是一个没有任何子节点的节点,因此是一个叶节点。由于BFS将为您找到实现此目标的最短路径,因此此算法将返回第一个叶节点。

请注意,您的
findMin
方法返回一个
int
,但您进行递归调用时根本不使用返回的
int
s!我建议您重新设计方法,同时考虑如何利用递归调用返回的数字