我试图用字符串(4+5)调用函数buildExpressionTree
我试图调试并发现树已成功创建,但当返回到main时,“tr”为空并包含垃圾。
它为什么不还树?
请帮忙,谢谢!

int main(){

char str[SIZE];
Tree tr;
double res;
BOOL expressionOK;
printf("Please enter the expression: ");
gets(str);

expressionOK = buildExpressionTree(str, &tr);

freeTree(tr);

return 0;

}
这是“buildExpressionTree”函数:
BOOL buildExpressionTree(char * str, Tree * tr){

BOOL valid = isvalidString(str);

if (valid){

    tr = (Tree *)malloc(sizeof(Tree));
    tr->root = buildTree(str, strlen(str));
}

else{
    tr = NULL;
}

return valid;

}
这是创建树的递归函数:
TreeNode * buildTree(char * str, int strLength){

int mainOpPlace;
TreeNode * resNode;

//if empty tree
if (strLength < 0){
    return NULL;
}

else{

    //find the main operator of the current string
    mainOpPlace = findMainOperator(str, strLength);

    //creating the tree Node
    resNode = (TreeNode *)malloc(sizeof(TreeNode));

    resNode->data = str[mainOpPlace];
    resNode->left = (buildTree(str + 1, mainOpPlace - 1));
    resNode->right = (buildTree(str + mainOpPlace + 1, (strLength - mainOpPlace - 2)));

    return resNode;
}

}

最佳答案

需要buildExpressionTree()返回malloc分配的树内存的地址。可以通过将函数键入Tree*来完成此操作,将bool参数的返回移动到参数列表中

Tree *buildExpressionTree(char * str, BOOL * AddressOfExpressionOK ) { ..

或者可以在参数列表中返回它,将树指针的值放在调用方提供的地址上,作为指向树的指针,
BOOL buildExpressionTree(char * str, Tree **ptr){ ..

但我认为另一种方法更容易理解。

关于c - 消失的二叉树,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/30421878/

10-09 07:17