【问题标题】:insert values into a binary search tree in C?将值插入C中的二叉搜索树?
【发布时间】:2012-11-19 08:13:41
【问题描述】:

我有一个包含我的结构的 .h 文件,我不能编辑这个文件:

struct KnightTree 
{
    int key;
    int level; 
    int balance;            //will be used in AVL only, and be ignored in other cases.
    KnightTree* pLeftChild;
    KnightTree* pRightChild;
};

还有一个我在这里编写代码的 .cpp 文件,我编写了一个代码来将 2 个值(键和级别)插入 BST:

void BSTinsert(KnightTree* tree, int k, int lvl)
{
    KnightTree* newnode;
    if (tree == NULL)
    {
        newnode->key=k;
        newnode->level=lvl;
        newnode->pLeftChild=NULL;
        newnode->pRightChild=NULL;
        tree = newnode;
    }
    else
    {
        if (tree->key > k)
            BSTinsert(tree->pLeftChild,k,lvl);
        else if (tree->key <= k)
            BSTinsert(tree->pRightChild,k,lvl);
    }
}

但是当我运行它时,控制台“思考”了大约 3 秒,并弹出错误提示 “exe 已停止工作” 所以我必须关闭程序时间>。我觉得很简单,但我现在有点困惑......我正在使用 Visual C++ 6.0(我必须使用这个旧版本......)

谢谢你们!

【问题讨论】:

  • 您是否调试过代码,通常这些错误与缓冲区有关,并且您没有包含整个代码,因此您可以将打印语句用于填充缓冲区的缓冲区的缓冲区大小分配,我们可以从那里两个知道哪个代码块有问题
  • 我认为您在这里可能有一个无限循环 - 在第一个 else 语句中您每次都在执行自己。最初你用 BSTInsert(tree->pLeftChild,k,lvl) 调用它,它会重新运行,落入“else if”部分,然后从那时起,它总是落入同一个区域“if (tree- >key

标签: c visual-c++-6


【解决方案1】:

你至少有两个主要问题:

  1. 您没有为 newnode 分配内存,因此通过解决它只会造成内存损坏。
  2. 您没有将新创建的节点附加到树,分配tree = newnode 不会创建到树的必要链接。

继续解决这两个问题。

还有一件事:在此处发布问题之前,您是否尝试过实际调试

【讨论】:

  • 当我尝试调试时,它说“访问冲突”。我会试试第2个问题。谢谢!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-01-17
  • 2012-04-24
  • 2020-03-16
  • 2013-05-06
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多