
解题思路:回溯解决
回溯结束条件:传入结点为叶子结点
void traversal(int* returnSize, struct TreeNode* node, char** ret, int* stack, int* top) {
stack[(*top)++] = node->val;
if(!node->left && !node->right) {
char* string = (char*)malloc(1000 * sizeof(char));
int i;
int len = 0;
for(i = 0; i < *top - 1; i++) {
//sprintf函数返回被写入的字符总数,这样可以一直确定要插入的数字的位置
len += sprintf(string + len, "%d->", stack[i]);
}
sprintf(string + len, "%d", stack[*top-1]);
ret[(*returnSize)++] = string;
}
else {
if(node->left) {
traversal(returnSize, node->left, ret, stack, top);
--*top;
}
if(node->right) {
traversal(returnSize, node->right, ret, stack, top);
--*top;
}
}
}
char ** binaryTreePaths(struct TreeNode* root, int* returnSize){
char** ret = (char**)malloc(1001 * sizeof(char*));
*returnSize = 0;
int stack[1024];
int top = 0;
traversal(returnSize, root, ret, stack, &top);
return ret;
}
