257. 二叉树的所有路径

257. 二叉树的所有路径

257. 二叉树的所有路径_第1张图片


C代码:DFS

// 1、必须满足前序遍历!
// 2、不是叶子节点就一直往数组中存放、若是叶子节点则从数组中生成路径!
// 逻辑还是很简单,DFS往下遍历就是

char ** ans;
int ansTop;
int* path;

void dfs(struct TreeNode* root, int pathTop) {  // 每一层的numTop不一样,这样就不用再回溯
    if (NULL == root) {
        return;
    } 
    if (NULL == root->left && NULL == root->right) {   // 放入ans
        char* tmp = (char*)malloc(sizeof(char) * 1000);
        tmp[0] = '\0';
        for (int i = 0; i < pathTop; ++i) {
            sprintf(tmp + strlen(tmp), "%d->", path[i]);
        }
        sprintf(tmp + strlen(tmp), "%d", root->val);
        ans[ansTop++] = tmp;  // path是一个字符串指针
    } else {  
        path[pathTop++] = root->val;  
        dfs(root->left, pathTop);
        dfs(root->right, pathTop);
    }
}

char ** binaryTreePaths(struct TreeNode* root, int* returnSize){
    ans = (char**)malloc(sizeof(char*)* 1000);
    ansTop = 0;
    path = (int*)malloc(sizeof(int) * 100);

    dfs(root, 0);
    *returnSize = ansTop;
    return ans;
}

你可能感兴趣的:(LeetCode刷题,深度优先,算法,leetcode)