簡體   English   中英

有條件地計算樹遍歷中的節點 - 遞歸

[英]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.

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