簡體   English   中英

Java中的樹實現

[英]Tree Implementation in Java

我得到以下樹:

原始樹

然后,我們被告知要使用last-child / previous-sibling方法更改這三個方法的實現。 結果是:

后一子/上一兄弟方法之后的樹

我現在正在研究Java實現,以在此樹上執行​​不同的功能。 我們有一個Tree接口和一個TreeNode接口。 它們都有許多我們要填寫的功能。

節點是這樣創建的:

MyTreeNode a = new MyTreeNode ("a");

通過以下方式創建樹(具有根):

MyTree     tree = new MyTree (a);

最后,節點被賦予兄弟姐妹,例如:

e.setChild(j);
e.setSibling(d);

我已經為setChild,setSibling,getNextSibling,getFirstChild和getChildren編寫了方法。 例如,這是getChildren的代碼:

public List getChildren ()
{
    List <MyTreeNode> children = new ArrayList <MyTreeNode> ();

    MyTreeNode x = this.child;

    children.add(x);

    while (x != null && x.sibling != null) {
        x = x.sibling;
        children.add(x);
    }

    return children;
}

現在我完全迷失了如何編寫高度,深度,節點子樹大小,getPreOrder,getPostOrder和樹大小的方法。

由於樹現在處於這種不同的表示形式中,因此我不確定如何編寫遞歸方法來檢查節點的高度或深度。 通常,據我了解,您將遞歸檢查左/右子樹..但是現在沒有了(據我所知)。 我能想到的唯一方法就是在每個節點上循環許多if語句和while循環..但這並不是最好的方法。

如何通過樹的實現遞歸地編寫這些方法?

另外,由於節點不以任何方式存儲在一起,因此我不確定如何獲取有關整個樹的詳細信息。 它們是按照我上面顯示的方式實現的,所以我不確定如何集體收集所有節點的數據。

如何在整個樹上的所有節點上創建樹大小,isEmpty或makeEmpty之類的方法?

抱歉,說明太冗長。

假設您的樹具有這樣的節點結構:

public class Node{
   String nodeName;

   Node left;
   Node right;

   public Node(String nodeName, Node left, Node right){
     this.nodeName = nodeName;
     this.left     = left;
     this.right= right;
   }
}

這是我對如何構造新樹的想法:在向樹中添加新節點時,您仍將保持樹結構。 根據將節點添加到樹的方式,您仍將繼續在父節點的左側或右側添加節點。

可視化新樹的一種可能方法是:

                A
               /
              E
            /   \
           D     J
         /   \   / \
        C    H  I   K
       /
      B
     /
    G
   /    
  F

注意:我在這里假設如果是一個孩子,它將被添加到您父母的左側。 但這在理想情況下取決於您的要求

如果您可以通過這種方式可視化此樹,則用於獲取高度,前序和后序遍歷的遞歸函數仍然保持不變。

還有兩個提示:

  • 添加同級就像在節點的父級的左側或右側添加一個節點,即,如果當前節點在其父級的左側,則可以在右側添加新節點。

  • 添加一個孩子將保持不變。 根據您的邏輯,您可以將新節點添加為當前節點的左子節點或右子節點。

暫無
暫無

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

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