【leetcode】116. 填充每个节点的下一个右侧节点指针

 

struct Node* connect(struct Node* root) {
    if (root == NULL) {
        return root;
    }

    // 从根节点开始
    struct Node* leftmost = root;

    while (leftmost->left != NULL) {
        // 遍历这一层节点组织成的链表,为下一层的节点更新 next 指针
        struct Node* head = leftmost;

        while (head != NULL) {
            // CONNECTION 1
            head->left->next = head->right;

            // CONNECTION 2
            if (head->next != NULL) {
                head->right->next = head->next->left;
            }

            // 指针向后移动
            head = head->next;
        }

        // 去下一层的最左的节点
        leftmost = leftmost->left;
    }

    return root;
}
struct Node* connect(struct Node* root) {
    if (root == NULL) {
        return root;
    }

    // 从根节点开始
    struct Node* leftmost = root;

    while (leftmost->left != NULL) {
        // 遍历这一层节点组织成的链表,为下一层的节点更新 next 指针
        struct Node* head = leftmost;

        while (head != NULL) {
            // CONNECTION 1
            head->left->next = head->right;

            // CONNECTION 2
            if (head->next != NULL) {
                head->right->next = head->next->left;
            }

            // 指针向后移动
            head = head->next;
        }

        // 去下一层的最左的节点
        leftmost = leftmost->left;
    }

    return root;
}

 

posted @ 2020-12-18 14:55  温暖了寂寞  阅读(87)  评论(0编辑  收藏  举报