对于这个问题的 future 观众可能需要解决此类问题的帮助:我通过组合 2 个函数(InsertNode() 和 InTree())修复了它,我不确定这是否是不好的做法,我会回复你们,看看它是否确实解决了问题,或者只是掩盖了问题,但它似乎正在起作用......
我浏览了这个网站(以及其他网站)上的各种答案,并从这些答案中得到了没有帮助的解决方案(尝试过但不起作用或只是与我的程序没有不同)。 插入函数(我已将其隔离并认为这是有问题的代码)在某处存在一些错误,导致我的程序崩溃。
NP InTree(NP Node,NP Root)
{
if (Root == NULL)
{
Root=Node;
return Root;
}
else
{
if (Node->Input < Root->Input)
{
return InTree(Node,Root->Left);
}
else if (Node->Input > Root->Input)
{
return InTree(Node,Root->Right);
}
else
{
puts("Duplicate");
return NULL;
}
}
}
void InsertNode(int I, TP Tree)
{
NP Node;
Node=(NP)malloc(sizeof(struct AVLNode));
InitializeNode(Node);
Node->Input=I;
Node->Height=0;
Node->Left=NULL;
Node->Right=NULL;
InTree(Node,Tree->Root);
Tree->Size++;
}
NP是节点指针,TP是树指针
Node变量是通过InsertNode()发送的初始化节点
void InitializeTree(TP Tree)
{
Tree->Root=NULL;
Tree->Size=0;
}
void InitializeNode(NP Node)
{
Node->Input=0;
Node->Height=0;
}
以上是我的初始化函数,以防您需要查看它们。
树的内存在调用任何函数之前在主类中分配。
我通过测试看到的主要问题是,一旦 Root 等于 Node,它仍然为空。
有什么办法可以解决这个问题吗?
最佳答案
在 InTree
函数中,Root
等于 Node
,它仅更改本地内存。
相反,您可能需要使用指向指针的指针来实现您正在尝试的操作。
关于c - C 中的二叉搜索树插入函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15934104/