【发布时间】:2022-01-06 22:24:36
【问题描述】:
我正在尝试编写一种可以将数组传输到二叉树的方法。我知道代码不正确,我运行它并希望它会显示一些我可以继续修复它的东西。但它只是继续加载,没有任何错误或结果。哪位大神给点建议,拜托了! 这是 BST 类:
public class BSTNode {
private String data;
private BSTNode left;
private BSTNode right;
public BSTNode(String data) {
this.data = data;
this.right = null;
this.left = null;
}
public String getData() {
return data;
}
public void setData(String data) {
this.data = data;
}
public BSTNode getLeft() {
return left;
}
public void setLeft(BSTNode left) {
this.left = left;
}
public BSTNode getRight() {
return right;
}
public void setRight(BSTNode right) {
this.right = right;
}
}
还有我的方法:
public BSTNode fromArray(String[] array, int start, int end) {
int i = start;
BSTNode root = new BSTNode(array[i]);
BSTNode current = root;
BSTNode parent = null;
while (i <= end) {
if (array[i].compareTo(current.getData()) < 0) {
parent = current;
current.setLeft(current); //Should I put current.setLeft(root) here?
} else {
parent = current;
current.setRight(current);
}
// Create the new node and attach it to the parent node
if (array[i].compareTo(parent.getData()) < 0) {
parent.setLeft(new BSTNode(array[i]));
} else {
parent.setRight(new BSTNode(array[i]));
}
i++;
}
return current;
}
感谢您的宝贵时间!
【问题讨论】:
-
感谢编辑! @Maurice Perry 看起来好多了!
-
current.setLeft(current);和current.setRight(current);基本上将当前节点链接到自身,这可能导致无限循环。这些电话根本没有意义。试着用这段代码解释你的意图是什么,应该会发生什么应该很明显。此外,您永远不会在循环中更改current,因此parent也永远不会改变。 -
我明白为什么它一直在加载。我尝试让它在 2 个变量比较 0 则右转。我研究了一些示例代码,它们只是简单地放入 current.left 或 current.right。但它在我的情况下不起作用,所以我认为 setLeft 会起作用。我不知道如何以正确的方式声明它。感谢您的帮助!
标签: java binary-tree binary-search-tree