对于可能需要此类问题帮助的此问题的未来查看者:我通过结合 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,它就保持为空。
有什么想法可以解决这个问题吗?