我正在创建一棵树并学习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;
}
}
答案 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;
}
}
这个实现当然是不是二叉树,但是你已经说过你想要从这个实现开始并从那里扩展,所以我希望这可以帮助你实现目标。