2015-06-06 104 views
-2

比方說,我們有一個基本的二進制樹,能夠被搜索到遞歸:設計更高效的樹

class BinaryTree{ 

    private int Element; 
    private BinaryTree LeftNode; 
    private BinaryTree RightNode; 

    //Class Constructors 

    //Class Methods 

} 

我最初得知這個設計二叉樹的和一般的樹主要是因爲它很簡單,易於使用。然而,有人用這個設計討論過,每次我展開樹,也就是將BinaryTree的一個實例添加到LeftNode或RightNode中時,另一個BinaryTree的實例化也需要保留內存空間來存儲該類的所有非靜態方法BinaryTree 。隨着樹呈指數增長,所需空間的數量也會大幅增加。

是否有更有效的方法來實現遞歸樹設計,同時保持對面向對象範例的真實性?

+0

什麼?這種擔憂沒有任何意義。樹不是「呈指數級增長」,並且您不需要額外的內存空間來存儲_methods._您已經擁有了正確,高效的實現。 「 –

+2

」還需要保留內存空間來存儲類BinaryTree的所有非靜態方法「 - 不。方法在實例中不佔用空間。 – davmac

+0

請參閱http://stackoverflow.com/questions/730321/what-is-the-memory-overhead-of-a-java-method – fabian

回答

2

你的假設:

另一個二叉樹的實例化,還需要保留 的存儲空間來存儲類二叉樹的所有非靜態方法。

不正確。

類實例方法不佔用類的每個新實例的空間。一個實例佔用的唯一內存空間就是它的數據。