簡體   English   中英

二進制搜索樹中葉的最短路徑

[英]Shortest path to leaf in Binary Search Tree

我正在使用遞歸在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教程

您的目標狀態將是沒有任何子節點的節點,因此是葉節點。 由於BFS將找到您達到此目標的最短路徑,因此該算法將返回第一個葉節點。

請注意,您的findMin方法返回一個int ,但是您在進行遞歸調用時根本不使用它們的返回int 我建議您在考慮如何利用遞歸調用返回的數字時重新設計您的方法。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM