具有多个参数的树遍历

Tree Traversal with multiple parameters

本文关键字:遍历 参数      更新时间:2023-10-16

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

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

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

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

谢谢你们的任何想法!

这可以用多个参数递归完成,但每次都必须传递一个指向"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++] = ''; //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"。

您还希望实现一种方法,防止程序在每次迭代后都编写零终止符。