我正在尝试遍历树并以前缀,后缀和中缀表示法打印出其内容。目前,程序只打印输入表达式的一个运算符。
我已经看到了递归完成此方法的方法,但是他们在函数中都使用了一个参数,这个参数与Node的类直接相关。 (Example)
如何使用多个参数以递归方式遍历树的左右节点?或者这甚至是一个可行的选择? 给我提出问题的代码是" expressiontree.cpp"中的第32-42行。但我已经包含了头文件和代码输出上下文的示例。
CODE(链接指向GitHub,因为本机文本编辑器给了我一些问题。)
感谢你们的任何想法!
答案 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”。
您还希望实现一种方法,使您的程序在每次迭代后都不会写入零终止符。