2014-04-04 93 views
1

我正在嘗試爲決策樹程序編寫一個節點類。我不知道如何構建一個構造函數,它會遞歸調用它,直到達到所有葉子,以及我需要的輔助方法。這是迄今爲止我所擁有的。Java中的決策樹節點方法

package DecisionTree; 

public class DecisionTNode { 

    Instance[] a; 
    double testValue; 
    DTNode left, right; 



    public static DTNode sortedArrayToBST(Instance[] num, int start, int end) { 
     if (start > end) { 
     return null; 
     } 
     int mid = start + (end-start)/2; 
     DTNode root = new DTNode(num.length, num); 
     root.left = sortedArrayToBST(num, start, mid-1); 
     root.right = sortedArrayToBST(num, mid+1, end); 
     return root; 
    } 
} 

回答

0

您的sortedArrayToBST將遞歸創建所有節點。

您不需要遞歸構造函數,只需要一個非常簡單的構造函數,它將testValue的值作爲參數並對其進行設置。

private DTNode(double data) 
{ 
    testValue = data; 
} 

並更改呼叫:

DTNode root = new DTNode(num[mid].getAttribute()); 

好了,這是假設你希望你的類幾乎現在做的方式。你可能會想要有一個Instance成員,並設置它(或其他),但代碼看起來非常相似。

理想的做法是使用generics,但一次只能一步。

你會調用它DecisionTree喜歡的東西(你大概會增加一個DTNode root成員):

root = sortedArrayToBST(instances, 0, instances.length); 

如果你想一個遞歸的構造函數,你可能想用它替換你的sortedArrayToBST函數 - 它們看起來非常相似,只要刪除DTNode root = ...行並按照上面的建議設置成員變量的值,並刪除if語句中的return null,而不是完全觸發這個函數。

public DTNode(Instance[] num, int start, int end) 
{ 
    int mid = start + (end-start)/2; 

    // do what you would've done in the constructor 
    testValue = num[mid].getAttribute(); 

    // no 'return null' if statement, instead, prevent the call from ever happening 
    // leaving 'left'/'right' as 'null' if it doesn't 
    if (start <= mid-1) 
    left = new DTNode(num, start, mid-1); 
    if (mid+1 <= end) 
    right = new DTNode(num, mid+1, end); 

    // no return statement - constructors can't return anything 
} 

你會打電話遞歸構造,如:

root = new DTNode(instances, 0, instances.length); 

此外,從顯示的代碼,有沒有必要有Instance[] a;DTNode成員。

+0

感謝您的回覆!我真的很困擾這個問題,你看到我可以添加到我的DTNode類的任何其他幫助器方法嗎?另外,我的DecisionTree類的構造函數如何?我可以寫DTNode root = new DTNode(instances)嗎?謝謝! – user3499571

+0

我沒有看到你需要任何助手功能,儘管你現在有這些功能(儘管當你進一步完成你的任務時,你需要一些功能當然是可能的 - 我只能推測你需要什麼)。請參閱編輯以回答如何調用它。 – Dukeling

+0

我知道這是很多要問,如果你拒絕,這是完全正常的,但無論如何,我可以私下給你發消息以獲得進一步的幫助嗎? – user3499571