【leetcode】144. 二叉树的前序遍历

 

void recursion(struct TreeNode* root,int* returnSize,int* arr){
    if (!root)
        return;    
    arr[(*returnSize)++]=root->val;
    recursion(root->left,returnSize,arr);
    recursion(root->right,returnSize,arr);
}
int* preorderTraversal(struct TreeNode* root, int* returnSize){
    int* arr=(int*)calloc(1000,sizeof(int));
    *returnSize=0;
    recursion(root,returnSize,arr);
    return arr;
}

 

int* preorderTraversal(struct TreeNode* root, int* returnSize) {
    int* res = malloc(sizeof(int) * 2000);
    *returnSize = 0;
    if (root == NULL) {
        return res;
    }

    struct TreeNode* stk[2000];
    struct TreeNode* node = root;
    int stk_top = 0;
    while (stk_top > 0 || node != NULL) {
        while (node != NULL) {
            res[(*returnSize)++] = node->val;
            stk[stk_top++] = node;
            node = node->left;
        }
        node = stk[--stk_top];
        node = node->right;
    }
    return res;
}

 

int* preorderTraversal(struct TreeNode* root, int* returnSize) {
    int* res = malloc(sizeof(int) * 2000);
    *returnSize = 0;
    if (root == NULL) {
        return res;
    }

    struct TreeNode *p1 = root, *p2 = NULL;

    while (p1 != NULL) {
        p2 = p1->left;
        if (p2 != NULL) {
            while (p2->right != NULL && p2->right != p1) {
                p2 = p2->right;
            }
            if (p2->right == NULL) {
                res[(*returnSize)++] = p1->val;
                p2->right = p1;
                p1 = p1->left;
                continue;
            } else {
                p2->right = NULL;
            }
        } else {
            res[(*returnSize)++] = p1->val;
        }
        p1 = p1->right;
    }
    return res;
}

 

posted @ 2020-12-22 16:43  温暖了寂寞  阅读(59)  评论(0编辑  收藏  举报