具有多个参数的树遍历

时间:2016-04-02 02:43:09

标签: c++ c recursion tree traversal

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

我已经看到了递归完成此方法的方法,但是他们在函数中都使用了一个参数,这个参数与Node的类直接相关。 (Example

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

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

感谢你们的任何想法!

1 个答案:

答案 0 :(得分:0)

这可以使用多个参数递归完成,但每次都必须传入指向“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”。

您还希望实现一种方法,使您的程序在每次迭代后都不会写入零终止符。