簡體   English   中英

如何在Java中的二分搜索樹中執行toArray方法?

[英]How to do the toArray method in a binary-search-tree in java?

我需要編寫一個方法toArray,該方法將二進制搜索樹的項放入數組中。 數組必須按升序排列。 現在,我正在樹節點上工作,稍后將其添加到BSTree中。

public class TreeNode
{
    Number value; 
    TreeNode left; 
    TreeNode right;

    public TreeNode(Number value)
    {
        this.value=value;
    }
    public Number[] toArray()
    {
        //???
    }
}

我知道我需要做什么,但是我不確定如何編寫代碼。 我可以遞歸地對數組的左側和右側進行排列。 之后,我需要創建一個更大的數組並將項目復制到其中,然后返回新的更大的數組。 還必須有一個沒有子項的終止條件,在這種情況下,我必須創建一個長度為1的數組,然后將值放入其中。

一種方法是使用遞歸來構建數組。 正如@Dawood所評論的那樣,首先將樹中的排序數字添加到ArrayList ,然后再將其轉換為正式數組會更容易。 遞歸的基本邏輯是,對於每個節點,我們先在左側添加所有數字,然后再添加節點的特定值,然后在右側添加所有數字。 如果我們考慮下面的二叉樹,這是有道理的:

     5
   /   \
  2     7
 / \   / \
1   3 6   8

下面的方法將向下遍歷左,加1 ,然后235 ,隨后樹的右側。 為了使這種方法有意義,它假定樹已排序。 如果沒有對樹進行排序,那么它對於搜索將不會很有用。

public void add(TreeNode node, List<Number> list) {
    if (node == null) {
        return;
    }

    add(node.getLeft(), list);
    list.add(node.getValue());
    add(node.getRight(), list);

    return;
}

public Number[] toArray(TreeNode head) {
    List<Number> list = new ArrayList<>();
    add(head, list);

    Number[] array = new Number[list.size()];
    for (int i=0; i < list.size(); ++i) {
        array[i] = list.get(i);
    }

    return array;
}

暫無
暫無

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

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