簡體   English   中英

可比較用作二叉樹中的結構

[英]comparable used as structure in a binary tree

我有一個Java的二叉樹,很好地工作。 但我想增強節點中的數據內容。 目前我可以在其上添加值,例如:

for( int i = 1; i <=10; i++ )
    t.insert( new Integer( i ) );

這將添加如下項目:

public void insert( Comparable item ) {
    current = parent = grand = header;
    nullNode.element = item;
    ...
}

這是樹的格式:

private static class RedBlackNode {
    // Constructors
    RedBlackNode( Comparable theElement ) {
        this( theElement, null, null );
    }

    RedBlackNode( Comparable theElement, RedBlackNode lt, RedBlackNode rt ) {
        element  = theElement;
        left     = lt;
        right    = rt;
        color    = RedBlackTree.BLACK;
    }

    Comparable   element;    // The data in the node
    RedBlackNode left;       // Left child
    RedBlackNode right;      // Right child
    int          color;      // Color
}

為了顯示樹,我喜歡這樣:

private void printTree( RedBlackNode t ) {
    if( t != nullNode ) {
        printTree( t.left );
        System.out.println(t.element);
        printTree( t.right );
    }
}

在使用許多其他語言編程時,該元素將被聲明為結構 ,對於Java中的示例代碼 ,它被聲明為Comparable ,並且當前僅將一個元素作為整數。 我的問題是,我怎樣才能像結構一樣使用它,以便能夠操作它,例如在這個偽代碼中執行:

System.out.println(t.element.valueInt);
System.out.println(t.element.firstNameString);
System.out.println(t.element.lastNameString);

我已經根據以前的一些帖子嘗試了不同的語法組合,但到目前為止還沒有一個工作。

對於添加了注釋的當前代碼版本,請檢查Gist

所有建議都深表感謝。

Comparable是一個界面。 任何類都可以實現它。 由於樹只需要知道它的節點是如何比較的,因為Comparable提供了這種知識,使用Comparable就足夠了。

但是,對您來說可能還不夠,因為您可能想知道屬於Comparable實現的其他屬性。 因此,您可以選擇使RedBlackNode類對進入節點的項的確切類型進行通用 ,前提是它實現了Comparable

public class RedBlackTree <T extends Comparable<? super T>> {
    private static class RedBlackNode {
        ...
       T element;
    }
}

其余代碼保持不變。 對於公開Comparable的樹的方法,例如用於獲取節點信息的方法,請使用泛型類型T

創建RedBlackTree時需要提供節點類型,如下所示:

RedBlackTree<MyClass> tree = new RedBlackTree<MyClass>();

當然, MyClass必須實現Comparable 更改的總體效果是,當您的代碼從樹中獲取元素時,它是強類型的,允許您在沒有強制轉換的情況下訪問其方法和字段。

暫無
暫無

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

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