我的 setter 没有设置

My setter is not setting

所以我正在尝试实现 BST(二叉搜索树)我做了一个添加方法,将 TreeNodes 添加到树[TreeNode] 数组

这是 TreeNode class,我试图在其中设置父节点以及左右节点,我用调试器进行了检查,我不确定为什么,但它没有设置Parent var 并且它只在 leftChild 和 rightChild 字段中添加一个或另一个。

问题中的 setter 就是这个

//set parent
public void setParent(TreeNode t)
{
    this.parent = t.parent;
}

我无法理解当我从 PAS43DEPQ 调用它时 class 它没有正确设置。

class TreeNode implements Comparable<TreeNode>
{
    private Integer value;
    private TreeNode leftChild;
    private TreeNode rightChild;
    private TreeNode parent;

    //constructors
    public TreeNode(){}
    public TreeNode(Integer v){this.value  = v;}
    public TreeNode(TreeNode t){
        this.value = t.value;
        this.parent = t.parent;
        this.leftChild = t.leftChild;
        this.rightChild = t.rightChild;
    }
    public TreeNode (Comparable c){this.value = (int) c;}

    //set parent
    public void setParent(TreeNode t)
    {
        this.parent = t.parent;
    }
    //get parent
    public TreeNode getParent()
    {
        return this.parent;
    }
    //get value
    public int getValue(){return value;}
    //set value
    public void setValue(Integer i){ this.value = i;}
    //get left node
    public TreeNode getLeftChild(){return leftChild;}
    //get right node
    public TreeNode getRightChild(){return rightChild;}
    //set left child
    public void setLeftChild(TreeNode t) {this.leftChild = t;}
    //set right child
    public void setRightChild(TreeNode t) {this.rightChild = t;}

    public TreeNode find(int n)
    {
        //this statement runs if the current node is == the value being searched.
        if(this.value == n)
            return this;
        //this returns values left of the root then performs a recursive call if not found
        if(value < this.value && leftChild != null)
            return leftChild.find(n);
        //this does the same as above except looks on the right side of the root
        if(rightChild != null)
            return rightChild.find(n);

        //this returns if value is not found
        return null;
    }

    @Override
    public int compareTo(TreeNode o)
    {

        if (this.value == o.value)
        {
            return 0;// if value equal
        }
        if (this.value > o.value) //if value greater
        {
             return 1;
        }
        if (this.value < o.value)
        {
            return -1;   //if value less
        }
        return 99;
    }
}

这是我添加的class:

public class PAS43DEPQ implements DEPQ
{
    private TreeNode[] tree = new TreeNode[100];
    int index = 0;

    @Override
    public Comparable inspectLeast() {
        return null;
    }

    @Override
    public Comparable inspectMost() {
        return null;
    }

    /*
    right: (2 * n) + 2
    left: (2 * n) + 1
    parent: (1 - n) / 2
     */

    public int right()
    {
        return (2 * index) + 2;
    }

    public int left()
    {
        return (2 * index) + 1;
    }

    public int parent()
    {
        return Math.round((index  - 1) / 2);
    }

    @Override
    public void add(Comparable c)
    {
        // Root node
        if (tree[0] == null) {
            tree[0] = new TreeNode(c);
            return;
        }

        //this while loop is for tree traversal
        while(tree[index] != null) {
            if( c.compareTo(tree[index].getValue()) == 0) {
                index += right() - index;
                continue;
            }

            if( c.compareTo(tree[index].getValue()) > 0) {

                index += right() - index;
                continue;
            }

            if( c.compareTo(tree[index].getValue()) < 0) {
                index += left() - index;
                continue;
            }

        }

        //this part is for place the new node
        if(tree[index] == null) {
            tree[index] = new TreeNode(c);
            tree[index].setParent(tree[parent()]);

            if( c.compareTo(tree[index].getValue()) == 0)
                tree[parent()].setRightChild(tree[index]);

            if( c.compareTo(tree[index].getValue()) > 0)
                tree[parent()].setRightChild(tree[index]);

            if( c.compareTo(tree[index].getValue()) < 0)
                tree[parent()].setLeftChild(tree[index]);


            index = 0;
        }

        return;
    }

    @Override
    public Comparable getLeast() {
        return null;
    }

    @Override
    public Comparable getMost() {
        return null;
    }

    @Override
    public boolean isEmpty() {
        return (tree[0] == null) ? true : false;
    }

    @Override
    public int size() {
        return tree.length;
    }
}

我无法弄清楚为什么没有将父项设置为行 "tree[index].setParent(tree[parent()])"

正在调用?关于为什么会发生这种情况的任何想法?

设置方法应该是这样的

//set parent
public void setParent(TreeNode t)
{
    this.parent = t;
}

此方法将使 TreeNode t 成为 this 引用的当前节点的父节点。

您正在使用的语句将 TreeNode t 的父节点设置为当前节点的父节点。