二叉树为了toString函数C++
Binary Tree in order toString function C++
一段时间以来我一直在使用这个函数时遇到问题,部分原因是这个赋值对我必须如何实现 toString 方法有限制。我有创建结果字符串的原始方法,然后将其设置为等于应该 return 按顺序排列二叉树字符串的方法。我提供了以下代码:
string Expression::toString() const{
string result = "";
result = inOrder(root, result);
return result;
}
string Expression::inOrder(Node* r, string x) const{
if(r->right==NULL && r->left == NULL){
if(r->num != NULL){
x += "(";
char c = r->num + '0';
string y(1, c);
x += y;
x += ")";
} else{
x += "(";
x += r->op;
x += ")";
}
return x;
}
x+=inOrder(r->left, x);
x+=r->op;
x+=inOrder(r->right, x);
}
由于常量函数不能操作任何外部变量,我的策略是在递归辅助函数中传递一个字符串参数,该函数将在传递节点时附加节点,最后 return 该字符串。但是,我遇到了 "access violation reading location 0xcccccccc" 错误。我知道这意味着我的递归有问题,尽管我似乎无法查明错误。提前致谢。
您只正确处理了 4 种可能情况中的两种情况,(r->right==NULL && r->left == NULL)
和 (r->right!=NULL && r->left != NULL)
。也就是说,如果恰好 r->left
和 r->right
之一等于 NULL
,您的程序就会崩溃。
你没有考虑独生子女的情况。如果 r->left
是 NULL
或 r->right
是 NULL
,您将访问一个 NULL
指针。
一段时间以来我一直在使用这个函数时遇到问题,部分原因是这个赋值对我必须如何实现 toString 方法有限制。我有创建结果字符串的原始方法,然后将其设置为等于应该 return 按顺序排列二叉树字符串的方法。我提供了以下代码:
string Expression::toString() const{
string result = "";
result = inOrder(root, result);
return result;
}
string Expression::inOrder(Node* r, string x) const{
if(r->right==NULL && r->left == NULL){
if(r->num != NULL){
x += "(";
char c = r->num + '0';
string y(1, c);
x += y;
x += ")";
} else{
x += "(";
x += r->op;
x += ")";
}
return x;
}
x+=inOrder(r->left, x);
x+=r->op;
x+=inOrder(r->right, x);
}
由于常量函数不能操作任何外部变量,我的策略是在递归辅助函数中传递一个字符串参数,该函数将在传递节点时附加节点,最后 return 该字符串。但是,我遇到了 "access violation reading location 0xcccccccc" 错误。我知道这意味着我的递归有问题,尽管我似乎无法查明错误。提前致谢。
您只正确处理了 4 种可能情况中的两种情况,(r->right==NULL && r->left == NULL)
和 (r->right!=NULL && r->left != NULL)
。也就是说,如果恰好 r->left
和 r->right
之一等于 NULL
,您的程序就会崩溃。
你没有考虑独生子女的情况。如果 r->left
是 NULL
或 r->right
是 NULL
,您将访问一个 NULL
指针。