亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

(Java)使用從二叉樹輸出布爾值的功能(類謂詞)接口

(Java)使用從二叉樹輸出布爾值的功能(類謂詞)接口

哈士奇WWW 2022-05-12 16:09:53
我有點麻煩:我構建了一個二叉樹類,其中包含一些對于此任務而言并不有趣的函數。每個節點都存儲一個左右子節點和一個父節點。每個節點都有一個鍵值,可以看作是一個標簽。我創建了 3 個類:Tree.java 是一個節點的類。BinaryTree.java 包含一些與整個樹相關的方法,例如最小值/最大值。Main.java 測試 Tree 的特性并包含 main 方法。我的問題: 我想用一個方法編寫一個功能接口,該方法將節點作為參數并輸出一個布爾值。這可用于傳入根節點并遞歸檢查樹中的每個節點是否大于或小于一個值。但是,我對功能接口完全陌生,我無法真正掌握功能背后的邏輯。這是我到目前為止得到的:@FunctionalInterfacepublic interface NodeOperation {    public abstract boolean forAll(Tree node);}NodeOperation overTwenty = (node) -> node.getValue() < 20;當我嘗試使用 lambda 表示法時,當我想打印 overTwenty 時它不會返回布爾值。有人可以幫我實現功能接口并解釋我如何訪問布爾變量,以便我可以開始考慮如何為每個節點遞歸地執行此操作。如果您對二叉樹不太了解,建議您在 Wikipedia 上查找。就我而言,我制作了一個 BST(二叉搜索樹),這意味著它的結構基于右側的較大值和左側的較小值。如果您需要我的代碼的某些特定部分,只需提出建議,我將在此處發布:)
查看完整描述

2 回答

?
HUWWW

TA貢獻1874條經驗 獲得超12個贊

在java中,接口的方法總是公開的。所以你的界面可以變成


@FuctionalInterface

    public interface NodeOperation {

        boolean forAll(Tree node);

    }

所以你寫了這行代碼


NodeOperation overTwenty = (node) -> node.getValue() < 20;

Wich 會為您創建一個接口實例,用于檢查節點的值是否低于 20


因此,假設您有一個值為 30 的 Tree 節點實例,如果您調用


 overTwenty.forAll(node) //will return false

這個函數不是遞歸的。如果要將函數應用于節點的所有子節點,則必須在 Tree 類上編寫遞歸方法


   public class Tree{

       ... 

    public boolean recursiveNodeOperation(NodeOperation operation) {

       if(!operation.forAll(this)) return false;

       for(Tree child : children) 

            if(! child.recursiveNodeOperation(operation)) 

                return false

       return true ;


      } 

    } 




root.recursiveNodeOperation(overTwenty); //will return true if all the nodes of the Tree starting from root are lower than 20

此方法將遞歸應用 Node 操作,因此將檢查 Tree 中的所有元素是否與您的函數匹配


查看完整回答
反對 回復 2022-05-12
?
MMTTMM

TA貢獻1869條經驗 獲得超4個贊

您創建的overTwenty對象是一個函數。如果要在樹的節點中使用它,則必須在樹的節點上調用它的唯一方法。例如,您可以這樣稱呼它:

boolean result = overTwenty.forAll(root);

順便說一句,您的NodeOperationinterface 與 a 非常等價,Function<Tree, Boolean>只是它返回的是原語boolean而不是 class Boolean。


查看完整回答
反對 回復 2022-05-12
  • 2 回答
  • 0 關注
  • 162 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號