c - C 中的二叉搜索树插入函数

标签 c struct null binary-search-tree avl-tree

对于这个问题的 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/

相关文章:

c - 二进制文件复制更新的帐户

c - SDL 将窗口保存为 BMP

c - 接受用户输入并在整个过程中继续使用它的变量

c - 如何使用指向 C 中结构指针的指针?

null - PHP 回显 `null` 值

c - 二维数组作为 pthread 函数参数

struct - Rust-引用结构的Enum变体

c++ - 如何检查用户是否输入了有效值?

sql - 在 doctrine 和 symfony 中将 '' 转换为 NULL

database - 对可空结构字段使用 nil 或 Null* 哪个更好