Java 为什么只创建二叉树的正确节点?

Java 为什么只创建二叉树的正确节点?,java,linked-list,binary-tree,getter-setter,Java,Linked List,Binary Tree,Getter Setter,我应该创建一个接受整数数组的二进制搜索树。我想知道如何访问Node类中的left和right节点来创建left和right节点 但是,此代码仅创建二叉树的正确节点。我的代码有什么问题 这是节点类: private int element; private BinaryNode left; private BinaryNode right; public Node( ){ this( 0, null, null ); } public( int theElement, BinaryNo

我应该创建一个接受整数数组的二进制搜索树。我想知道如何访问Node类中的left和right节点来创建left和right节点

但是,此代码仅创建二叉树的正确节点。我的代码有什么问题

这是节点类:

private int element;
private BinaryNode left;
private BinaryNode right;

public Node( ){
    this( 0, null, null );
}

public( int theElement, BinaryNode lt, BinaryNode rt ){
    element = theElement;
    left    = lt;
    right   = rt;
}

public int getElement( ){
    return element;
}

public BinaryNode getLeft( ){
    return left;
}

public BinaryNode getRight( ){
    return right;
}

public void setElement( int x ){
    element = x;
}

public void setLeft( BinaryNode t ){
    left = t;
}

public void setRight( BinaryNode t ){
    right = t;
}
这是我创建树的代码。这两段代码位于不同的java类文件中:

static Node obj = new Node();
static Node root = new Node();

static Node BinaryTree(int[] array, int begin, int end){
    if(begin > end){  //checks in the array is still in bound
        return null;  //returns null so the next node can be null
    }

    int middle = (begin + end)/2;  //finds the middle index
    obj.setElement(array[middle]);
    root = new Node(obj.getElement(), obj.getLeft(), obj.getRight()); //creates the root node of the tree/subtree
    root.setLeft(BinaryTree(array, begin, middle-1)); //creates the left tree or node recursively
    root.setRight(BinaryTree(array, middle+1, end));  //creates the right tree or node recursively
    return root; //places/returns the node of the tree in its place
}

其中一些问题是:

  • 您的代码混合了
    BinaryNode
    Node
    。我将假定
    节点
  • 第一个代码块的构造函数没有名称——这是一个语法错误
  • 不应初始化为
    新节点
    ,而应初始化为调用
    二进制树的返回值
  • obj
    不应在大于
    BinaryTree
    函数的范围内定义,因为您将在每次递归调用中不断重复使用同一对象,这将对算法产生破坏性影响。你甚至不需要这个变量
BinaryTree
更改为:

static Node BinaryTree(int[] array, int begin, int end){
    if (begin > end) {
        return null;
    }

    int middle = (begin + end) / 2;
    return new Node(array[middle], BinaryTree(array, begin, middle - 1), 
                                   BinaryTree(array, middle + 1, end));
}
示例调用可以如下所示:

int[] array = {1,2,3,4,5};
Node root = BinaryTree(array, 0, array.length - 1); 

请编辑您的问题,使其包含问题的最小复制。好的,我会这样做quick@tgdavies希望它现在有意义谢谢你非常有效