public void insert(int data) {
if (root == null) root = new AVLNode(data);
else {
AVLNode node = root;
while (node != null) {
if (node.data <= data) {
node = node.right;
}
else {
node = node.left;
}
}
node = new AVLNode(data);
}
}
我试图做一个二叉搜索树(非递归),然后在以后访问,并做一个遍历遍历,但是当我打印root时,我只得到1个元素。我认为所有插入都起作用,但是root仅在其中插入了第一个插入,而其左侧和右侧没有引用任何内容,所以我认为这就是为什么im只得到1个元素的原因。我如何将root指向节点树的顶部?
这是节点类btw
class AVLNode
{
AVLNode left, right;
int data;
/* Constructor */
public AVLNode()
{
left = null;
right = null;
data = 0;
}
/* Constructor */
public AVLNode(int n)
{
left = null;
right = null;
data = n;
}
}
答案 0 :(得分:1)
问题在于变量的引用。 While循环直到在node
变量上达到空值,然后将新节点分配给它。但是父级node.left
或node.right
与新的node
变量之间没有链接,因为它分配了一个null
值。因此,您将值分配给未链接任何变量的变量,它将丢失。您需要像下面的示例一样直接将新节点分配给node.left
或node.right
:
public void insert(int data) {
if (root == null) {
root = new AVLNode(data);
} else {
AVLNode node = root;
AVLNode newNode = new AVLNode(data);
while (node != null) {
if (node.data <= data) {
if (node.right == null) {
node.right = newNode;
node = null;
} else {
node = node.right;
}
} else {
if (node.left == null) {
node.left = newNode;
node = null;
} else {
node = node.left;
}
}
}
}
}