树addNode检测根

时间:2015-12-23 05:31:39

标签: java tree binary-tree

我正在创建一棵树并学习TDD。我不确定在添加节点时如何检测根。基本上我想要1 - > 2 - > 3形成。我认为这就是我目前的设置在内存中的样子。显然下面的测试失败了。 (部分)

测试代码:

@Test
public void test() {
    Nodes root = new Nodes(4);
    assertNotNull(root);

    root.addNode(5);
    root.addNode(6);
    assertEquals(5, root.printNodes(root)[1]);
    assertEquals(6, root.printNodes(root)[2]);
}

当我添加节点时,我想将其添加到根目录。

public class Nodes {

    int data;
    Nodes next;

    Nodes(int data) {
        this.data = data;
    }

    public void addNode(int i) {
        Nodes newNode = new Nodes(i);

        while (newNode.next != null) {
            //detect root and add the newnode
        }
    }

    public int[] printNodes(Nodes root) {
        int[] n = new int[5];
        int i = 0;
        while (root != null) {
            n[i] = root.data;
            root = root.next;
            i++;
        }

        return n;
    }
}

1 个答案:

答案 0 :(得分:0)

root.addNode(5);
root.addNode(6);

使用当前代码,您不需要检测根节点是什么(您已经使用root),而是需要检测插入节点的顺序。

因此,您的addNode可能类似于以下内容:

public void addNode(int i)
{
    if (i == this.data) {
        // what do you do when data equal?
    } else {
        if (this.next != null) {
            if (this.next.data < i) {
                this.next.next = new Nodes(i);
            } else {
                Nodes tmp = new Nodes(i);
                tmp.next = this.next;
                this.next = tmp;
            }
        } else {
            this.next = new Nodes(i);
        }
    }
}

然后是你的printNodes功能:

public void printNodes()
{
    Nodes tmp = this;
    while (tmp != null) {
        System.out.printf("%d\n", tmp.data);
        tmp = tmp.next;
    }
}

这个实现当然是不是二叉树,但是你已经说过你想要从这个实现开始并从那里扩展,所以我希望这可以帮助你实现目标。