二进制搜索树 - 有序遍历

时间:2015-10-07 00:25:30

标签: c++ binary-search-tree tree-traversal crossword

我正在尝试使用BST制作填字游戏程序,我目前在树中插入了以下单词:

word,will,wyr,wale,wilt,apple,abs,wack(按顺序插入)

但是每当我在visual studio中调试程序时,我都会收到错误

Exception thrown at 0x008DE28C in AVLBSTcrosswordhunter.exe: 0xC0000005: Access violation writing location 0x0000001C.

然而,当跟踪变量时,我的遍历变量永远不会设置为1,所以我不会在循环时退出,错误发生在里面,我只是不知道在哪里以及为什么。

while (!traversed)
{
    if (temp != NULL)
    {
        if (temp->word.substr(0, sub_num) == value.substr(0, sub_num))
        {
            count++;
        }
        s.push(temp);
        temp = temp->left;
    }
    else
    {
        if (!s.empty())
        {
            temp = s.top();
            s.pop();
            temp = temp->right;
        }
        if (s.empty())
        {
            traversed = 1;
        }
    }
}

为了澄清,我正在搜索的单词是“w ***”('*'是通配符),所以if语句检查指针temp是否有子串w,如果声音增加数,这样我就可以发回一个数字,说明通配符搜索的匹配数量。

此外,temp在while循环之前设置为root(word)。

感谢您提供任何帮助!

1 个答案:

答案 0 :(得分:0)

似乎我在匆忙中创建了两个遍历变量和两个堆栈变量以完成此操作,它现在似乎正常工作!