gpt4 book ai didi

java - 如何使这个二叉搜索树工作??? ( java 语)

转载 作者:行者123 更新时间:2023-11-30 05:58:31 29 4
gpt4 key购买 nike

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 只是其中的第一个插入,并且它的左侧和右侧不引用任何内容,我认为这就是为什么我只获得 1 个元素。我如何将根引用到节点树的顶部?顺便说一句,这是节点类

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;
}
}

最佳答案

问题出在变量的引用上。 While 循环直到达到 node 变量的空值,然后将新节点分配给它。但父 node.leftnode.right 与新 node 变量之间没有链接,因为它有一个 null 分配的值。因此,您将值分配给一个未链接到任何内容的变量,并且该值将会丢失。您需要将新节点直接分配给 node.leftnode.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;
}
}
}
}
}

关于java - 如何使这个二叉搜索树工作??? ( java 语),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52711659/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com