LeetCode-257-二叉树的所有路径-C语言

#define LEN 0xfffff
#define LEN2 0xff

typedef struct TreeNode Node;

void get(Node *node, char **ret, int *ret_index, char *stack, int stack_index) {
    int i;
    
    if(!node) return;
    
    stack[stack_index++] = node->val;
    
    if(!node->left && !node->right){
        ret[(*ret_index)] = (char *)malloc(sizeof(char) * (LEN2));
        ret[(*ret_index)][0] = '\0'; 
        for(i=0; i%d", ret[(*ret_index)], stack[i]);
        }

        (*ret_index)++;
        return;
    }
    
    get(node->left, ret, ret_index, stack, stack_index);
    get(node->right, ret, ret_index, stack, stack_index);
}

char ** binaryTreePaths(struct TreeNode* root, int* returnSize){
    char **ret = (char **)malloc(sizeof(char *) * LEN);
    int index = 0;
    char *stack = (char *)malloc(sizeof(char) * LEN);
    int stack_index = 0;
    
    get(root, ret, &index, stack, stack_index);
    
    *returnSize = index;
    
    return ret;
}


/////2020/4/29第二遍答案:
/**
 * Definition for a binary tree node.
 * struct TreeNode {
 *     int val;
 *     struct TreeNode *left;
 *     struct TreeNode *right;
 * };
 */


/**
 * Note: The returned array must be malloced, assume caller calls free().
 */
#define LEN 0xfff

void get(struct TreeNode *node, int *stack_index, int *stack, char **ret, int *ret_index)
{
    int i=0, j=0, str_index=0;
    char buffer[64];

    if(!node){
        return;
    }

    stack[(*stack_index)++] = node->val;

    if(!node->left && !node->right){
    
        ret[(*ret_index)] = (char *)malloc(sizeof(char) * LEN);

        while(i<(*stack_index)) {
            sprintf(buffer, "%d", stack[i]);        
            j = 0;
            while(buffer[j]){
                ret[(*ret_index)][str_index++] = buffer[j++];
            }
            ret[(*ret_index)][str_index++] = '-';
            ret[(*ret_index)][str_index++] = '>';
            i++;
        }
    
        str_index -= 2;
        
        ret[(*ret_index)][str_index++] = 0;

        (*ret_index)++;

        (*stack_index)--;

        return;
    }

    get(node->left, stack_index, stack, ret, ret_index );

    get(node->right, stack_index, stack, ret, ret_index );

    (*stack_index)--;
}

char ** binaryTreePaths(struct TreeNode* root, int* returnSize){
    int stack[LEN], stack_index=0;
    char **ret = (char **)malloc(sizeof(char *) * LEN);
    int ret_index = 0;

     get(root, &stack_index, stack, ret, &ret_index);

     *returnSize = ret_index;

     return ret;
}



你可能感兴趣的:(LeetCode)