【问题标题】:Tree Traversal with multiple parameters具有多个参数的树遍历
【发布时间】:2016-07-21 23:36:01
【问题描述】:

我正在尝试遍历树并以前缀、后缀和中缀表示法打印出它的内容。目前,程序只打印出输入表达式的一个运算符。

我见过递归完成这个的方法,但它们都在函数中使用了一个参数,该参数与 Node 的类直接相关。 (Example)

如何使用多个参数递归遍历树的左右节点?或者这甚至是一个可行的选择? 给我带来问题的代码是“expressiontree.cpp”中的第 32-42 行,但我已经包含了头文件和代码输出上下文的示例。

CODE(链接指向 GitHub,因为本机文本编辑器给了我一些问题。)

感谢你们的任何想法!

【问题讨论】:

    标签: c++ c recursion tree traversal


    【解决方案1】:

    这可以通过多个参数递归完成,但您必须每次都传递一个指向“ETreeNode”实例的指针,如下所示:

    bool ETreeNode::preorder(ETreeNode* currentNode, char* s, int& n, const int& len){
        bool error = false;
    
        if (!currentNode) // insure that the "currentNode" is not NULL
            return true; // you can change this to implement your "error" variable if you want to
    
        //YOUR CODE GOES HERE
        if (m_bIsOperator)
        { //operator node
            s[n++] = m_chOp; //append operator character to s
    
            preorder(currentNode->m_pLeftChild, s, n, len); // move to the next left node
            preorder(currentNode->m_pRightChild, s, n, len); // move to the next right node 
    
            s[n++] = '\0'; //zero terminator
        } //if
        else
        { //number node
            char buffer[32]; //temporary character buffer
            sprintf(buffer, "%d", m_nValue); //print number into buffer
            strcat((char*)(s + n), buffer); //append buffer to s
        } //else
    
        return error;
    } //preorder
    

    问题:你的数据树是中缀顺序的吗?

    您将需要实现一些代码以确保“n”永远不会等于或大于“len”。

    您还需要实现一种方法来防止您的程序在每次迭代后编写零终止符。

    【讨论】:

    • 感谢您的反馈!我会试试这个,看看效果如何。
    • 使用你的方法给了我编译器错误,因为该函数正在另一个相关文件中使用。按照说明,除了我在此处记录的文件之外,我无法修改任何内容。我知道你的方法是如何工作的,但我认为在我的具体情况下它是不可行的。有没有一种方法仍然只需要 3 个参数?
    • 通常,对于这样的数据结构,有一个类表示和管理数据结构本身,然后至少还有一个其他子类表示该数据结构的元素。你的情况是这样吗?例如,您是否有名为“ETree”的类或类似的类?你说你不能修改“ETreeNode”类,因为你有“说明”;这是否意味着这是一个学校项目或类似的东西?您是否可以添加新课程?最后一个问题,如果有父类,可以修改吗?
    猜你喜欢
    • 2023-04-05
    • 2018-03-17
    • 1970-01-01
    • 2018-03-07
    • 1970-01-01
    • 2023-01-26
    • 1970-01-01
    • 1970-01-01
    • 2014-06-05
    相关资源
    最近更新 更多