【发布时间】:2014-11-19 02:19:31
【问题描述】:
以下是我当前添加新节点的代码(在同一级别上)。这是添加newNode时需要修改以添加排序属性的代码部分。通俗的讲,当 newNode 前面的 String 数据大于 newNode 本身的 String 数据时,我需要在那个位置添加 newNode。
public void traverseRight(Node v, Node newNode) {
if(v.getData().equals(newNode.getData())){
System.out.println(v.getData() + " was already found in the tree under " + v.getParent().getData() + ".");
}
else if (hasRight(v)) {
traverseRight(v.getRight(), newNode);
}
else {
v.setRight(newNode);
newNode.setParent(v.getParent());
}
}
如果还有其他有用的东西,比如更多代码,我有很多可以解决的。
更新:好的,经过一个小时的节奏和一次 YouTube 搜索“java compareTo()”,这就是我想出的。为了提高可读性,我尝试添加一些简洁的 cmets。
对这种方法有什么意见吗?我是否忽略了任何事情或做某事不正确/效率低下?
public void traverseRight(Node v, Node newNode) {
if(v.getData().equals(newNode.getData())){
System.out.println(v.getData() + " was already found in the tree under " + v.getParent().getData() + ".");
}
else if(v.getData().compareToIgnoreCase(newNode.getData()) > 0){
if(v.getParent().getLeft() == v){
// MEANS V IS THE FIRST CHILD IN THIS STRUCTURE
newNode.setParent(v.getParent());
v.getParent().setLeft(newNode);
newNode.setRight(v);
}
else{
// V IS NOT THE FIRST CHILD, GUARANTEED TO HAVE A PREVIOUS NODE
Node prev = getPrev(v.getParent().getLeft(), v);
newNode.setParent(v.getParent());
prev.setRight(newNode);
newNode.setRight(v);
}
}
else if (hasRight(v)) {
traverseRight(v.getRight(), newNode);
}
else {
// MEANS WE REACHED THE END OF THE STRUCTURE W/O A HIGHER VALUE THAN NEWNODE
v.setRight(newNode);
newNode.setParent(v.getParent());
}
}
作为记录,它通过了我迄今为止运行的所有调试测试。这并不多,因为它只工作了大约 10 分钟,但到目前为止还不错。
再次感谢!
更新 #2: 排序末尾有多个数字的字符串时失败。 (例如 22 号航班)
如果我要输入航班 1、2、3 和 22,我的程序会返回:
航班 1 航班 2 22号班机 3号航班
不是世界末日,因为这只是一个家庭作业项目,但我不确定是否有人对此有任何快速修复。谢谢!
【问题讨论】:
-
请编辑您的标签。 Node.js 与此无关。这是完全不同的事情。
-
对不起,这就是我使用建议标签的结果!
-
另外,欢迎来到 StackOverflow。发布一些正确缩进的代码而不是将其与您的文本结合起来很有用。请务必发布足够的代码,以便我们对您的问题有一个合理的理解。这将有助于让人们更好、更快地回答您的问题。
-
谢谢您,感谢您的热烈欢迎,我采纳了您的明智建议,添加了一些(实际上清晰的)代码。
标签: java tree binary-tree