我不确定这种添加方法是否有效,因为我真的不知道如何检查以确保它已被添加到正确的位置。
1.这种方法有什么问题吗?
2.如何测试二叉树数据结构(如果对象被添加到适当的位置)?
3.这可以通过递归来完成吗?
4.如果是,使用循环或递归会更好吗?
public boolean add(String item) {
Node tempNode = this.root;
if (root == null) {
root = new Node(item);
return true;
}
while (tempNode.getItem().compareTo(item) == 0 || tempNode.getItem().compareTo(item) > 0 || tempNode.getItem().compareTo(item) < 0) {
if (tempNode.getItem().compareTo(item) == 0) {
if (tempNode.getLeftChild() == null) {
tempNode.setLeftChild(new Node(item));
return true;
} else if (tempNode.getRightChild() == null) {
tempNode.setRightChild(new Node(item));
return true;
} else if (tempNode.getLeftChild() != null) {
tempNode = tempNode.getLeftChild();
} else if (tempNode.getRightChild() != null) {
tempNode = tempNode.getRightChild();
}
} else if (tempNode.getItem().compareTo(item) > 0) {
if (tempNode.getLeftChild() == null) {
tempNode.setLeftChild(new Node(item));
return true;
} else {
tempNode = tempNode.getLeftChild();
}
} else {
if (tempNode.getRightChild() == null) {
tempNode.setRightChild(new Node(item));
return true;
} else {
tempNode = tempNode.getRightChild();
}
}
}
return false;
}
答案 0 :(得分:0)
我在您的代码中看到两个错误。
其次,测试二叉树的最佳方法是尝试向其添加内容并通过遍历树将其打印出来。 (参见顺序树遍历 - 一种递归)
第三,所有事情都可以用递归来完成,实际上用循环进行树遍历是很困难的。
答案 1 :(得分:0)
我将如何检查以确保它已被添加到正确的位置。
您可以在make breakpoint
调用后add
或make breakpoint
all return statement
method
,然后您可以看到childs of root
和{{ 1}}。通过这种方式,您可以查看整个树,并检查您插入的节点是否在childs of their child
上。
至于你的代码,存在一些小缺陷。
首先 true postion
必须为真
second ,代码如下:
tempNode.getItem().compareTo(item) == 0 || tempNode.getItem().compareTo(item) > 0 || tempNode.getItem().compareTo(item) < 0
最后 if (tempNode.getLeftChild() == null) {
tempNode.setLeftChild(new Node(item));
return true;
} else if (tempNode.getRightChild() == null) {
tempNode.setRightChild(new Node(item));
return true;
} else if (tempNode.getLeftChild() != null) {
tempNode = tempNode.getLeftChild();
} else if (tempNode.getRightChild() != null) {
tempNode = tempNode.getRightChild();
}
可能永远不会是else if
,也就是说它与代码相同:
executed