[英]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
,然后2
, 3
, 5
,隨后樹的右側。 為了使這種方法有意義,它假定樹已排序。 如果沒有對樹進行排序,那么它對於搜索將不會很有用。
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.