QT打印二叉树指令消息

时间:2017-04-26 15:46:19

标签: c++ qt binary-tree

我在尝试在qt上的GUI中显示正确的调试消息时遇到问题。我正在实现基于用户输入的单词的二叉树。对于输入的每个单词,应显示相应的调试消息。

例如:

  • 用户输入:a

  • 然后用户输入b

  • 调试消息word is greater than a

我遇到的问题是,如果用户要在调试消息中键入第三个单词是不正确的。

  • 用户输入c

  • 调试消息仍显示为word is greater than a

但我希望它能显示word is greater than b

如果用户输入重复的字词,则该消息应显示'word' has already been detected。此消息仅在用户输入并复制的原始单词时才有效。对于上面的示例,如果用户再次输入a,则会显示正确的消息。如果他们再次输入b,则不会显示重复的消息。

我该如何解决这个问题?

QStringList tree::VerboseModeinsert(NodePtr &ptr, QString aWord)
{

    aWord.remove(QRegExp("[[]"));
    aWord.remove(QRegExp("[]]"));

    if(!(aWord.contains(QRegExp("[0123456789]"))))
    {
    aWord = aWord.toLower();
    if(ptr != NULL)
    {
        if(aWord < ptr->word)
        {
            insert(ptr->below, aWord);
            QString a = "Word is less than ";
            QString b = ptr->word;
            verboseList << a + b;
        }
        else if(aWord > ptr->word)
        {
            insert(ptr->above, aWord);
            QString a = "Word is greater than ";
            QString b = ptr->word;
            verboseList << a + b;
        }
        else
        {
            ptr->occurence++;
            QString c = " has already been detected";
            verboseList << aWord + c;
        }
    }
    else
    {
        ptr = new WordTree;
        ptr->word = aWord;
        ptr->below = NULL;
        ptr->above = NULL;
        ptr->occurence = 1;
    }
}
return verboseList;
}

1 个答案:

答案 0 :(得分:0)

似乎你忘了更新指向最后插入的指针

试试这个:

        ...
        if(aWord < ptr->word)
        {
            ...
            ptr = ptr->below;
        }
        else if(aWord > ptr->word)
        {
            ...
            ptr = ptr->above;
        }
        ...

PS:由于你没有提供MCVE,我不能完全确定我在做什么,但我认为这篇文章很难推断出你没有改变指向最后插入的指针。