Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/algorithm/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 设计更高效的树_Java_Algorithm_Recursion_Tree - Fatal编程技术网

Java 设计更高效的树

Java 设计更高效的树,java,algorithm,recursion,tree,Java,Algorithm,Recursion,Tree,假设我们有一个基本的二叉树,能够递归搜索: class BinaryTree{ private int Element; private BinaryTree LeftNode; private BinaryTree RightNode; //Class Constructors //Class Methods } 我最初学习二叉树和普通树的设计主要是因为它简单易用。然而,有人讨论过,在这种设计中,每次我展开树,也就是在LeftNode或Righ

假设我们有一个基本的二叉树,能够递归搜索:

class BinaryTree{

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

    //Class Constructors

    //Class Methods

}

我最初学习二叉树和普通树的设计主要是因为它简单易用。然而,有人讨论过,在这种设计中,每次我展开树,也就是在LeftNode或RightNode中添加一个BinaryTree实例时,另一个BinaryTree的实例化也需要保留内存空间来存储类BinaryTree的所有非静态方法。随着树的指数增长,所需的空间量也将大幅增加

是否有更有效的方法来实现递归树设计,同时保持面向对象的范例?

您的假设:

另一个二进制树的实例化也需要保留 存储类BinaryTree的所有非静态方法的内存空间

这是不正确的


类实例方法不会占用类的每个新实例的空间。实例占用的唯一内存空间是其数据。

什么?这种担心没有任何意义。树不是“指数”增长的,并且不需要额外的内存空间来存储方法。您已经有了正确、高效的实现。”还需要保留内存空间来存储类BinaryTree的所有非静态方法”-否。方法不会在实例中占用空间。请参阅,对象的开销很小(请参阅),但它与节点数成正比。存储平衡二叉树所需的内存在深度上是指数级的,这也意味着它与节点数成正比。当然,您可以将树节点的字段存储在一个数组中,也可以将子节点的索引存储在另外两个数组中,但这会导致更多的问题,而解决不了这些问题。。。