【问题标题】:Shortest path to leaf in Binary Search Tree二叉搜索树中到叶子的最短路径
【发布时间】:2014-04-28 02:14:45
【问题描述】:

我正在使用递归来查找 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;
 }

我认为正在发生的事情是它正在返回堆栈的开头,那么我将如何返回第一个无子叶节点?

【问题讨论】:

    标签: java binary-search-tree


    【解决方案1】:

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

    这里是算法的精彩演示和伪代码跟进:

    BFS Tutorial

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

    【讨论】:

      【解决方案2】:

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

      【讨论】:

        猜你喜欢
        • 2015-07-04
        • 2016-08-03
        • 1970-01-01
        • 2022-01-26
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多