[英]Conditionally counting nodes in a tree traversal - recursively
處理大學作業,需要比較樹中的節點並計算滿足特定條件的節點。 我可以看到如何迭代地執行此操作,使用堆棧遍歷樹等,但我確信講師正在尋找遞歸解決方案,而我正在努力解決這個特定的實現。
我目前的(有缺陷的)實現是:
public int traverseIncrement(User user, User reference) {
if(user == null)
return 0;
int count = 1;
if (user.getLeft() != null) {
if(user.getLevel() > reference.getLevel()) {
count += traverseIncrement(user.getLeft(), reference);
}
}
if (user.getRight() != null) {
if(user.getLevel() > reference.getLevel()) {
count += traverseIncrement(user.getRight(), reference);
}
}
return count;
}
有兩個明顯的問題,第一個是第一個節點從未被評估過,第二個是我總是比所需的 output 高一個。 任何朝着正確方向輕推都會有所幫助!
我認為這兩個問題是相關的。 與其假設count
為 1,然后根據是否滿足條件進行遞歸,您應該根據條件設置count
,然后進行遞歸。 換句話說,將給定節點的評估留給處理該節點的調用。
此外,您可以消除對左或右的檢查null
因為您的 function 已經在輸入時進行檢查。
public int traverseIncrement(User user, User reference) {
if(user == null)
return 0;
int count = (user.GetLevel() > reference.getLevel()) ? 1 : 0;
count += traverseIncrement(user.getLeft(), reference);
count += traverseIncrement(user.getRight(), reference);
return count;
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.