예제 #1
0
파일: 114.c 프로젝트: DerrickChi/LeetCode
void flattenHelper(struct TreeNode* root, struct TreeNode **start, struct TreeNode **end){
    if (root == NULL) {
        *start = *end = NULL;
        return;
    }
    struct TreeNode *lstart, *lend, *rstart, *rend;
    lstart = lend = rstart = rend = NULL;

    flattenHelper(root->left, &lstart, &lend);
    flattenHelper(root->right, &rstart, &rend);

    root->left = NULL;

    if (lend != NULL) {
        root->right = lstart;
        lend->right = rstart;
    }
    else {
        root->right = rstart;
    }

    *start = root;

    if (rend != NULL) {
        *end = rend;
    }
    else if (lend != NULL) {
        *end = lend;
    }
    else {
        *end = root;
    }
}
예제 #2
0
std::pair<Node *, Node *> flattenHelper(Node *root) {
    if (root != NULL) {
        if (root->left == NULL && root->right == NULL) {
            return {root, root};
        } else {
            auto left_tree = flattenHelper(root->left);
            auto right_tree = flattenHelper(root->right);
            
            if (left_tree.first == NULL) {
                root->left = NULL;
                left_tree.first = root;
            } else {
                left_tree.second->right = root;
                root->left = left_tree.second;
            }
            
            if (right_tree.first == NULL) {
                root->right = NULL;
                right_tree.second = root;
            } else {
                right_tree.first->left = root;
                root->right = right_tree.first;
            }
            
            return {left_tree.first, right_tree.second};
        }
    }
    return {NULL, NULL};
}
예제 #3
0
파일: 114.c 프로젝트: DerrickChi/LeetCode
void flatten(struct TreeNode* root) {
    struct TreeNode *start, *end;
    start = end = NULL;

    flattenHelper(root, &start, &end);
}
예제 #4
0
Node * flatten(Node *root) {
    if (root) {
        return flattenHelper(root).first;
    }
    return NULL;
}