[leetcode]Populating Next Right Pointers in Each Node II

来源:互联网 发布:java数组的长度单位 编辑:程序博客网 时间:2024/05/07 02:26
class Solution {
public:
    void insert_node(TreeLinkNode *&tail, TreeLinkNode *p) {
        p->next = NULL;
        tail->next = p;
        tail = p;
    }
    TreeLinkNode *delete_node(TreeLinkNode *fake_head, TreeLinkNode *&tail) {
        TreeLinkNode *p;
        if (fake_head->next == tail) {
            p = fake_head->next;
            fake_head->next = NULL;
            tail = fake_head;
        } else {
            p = fake_head->next;
            fake_head->next = p->next;
        }
        return p;
    }
    void connect(TreeLinkNode *root) {
        // Note: The Solution object is instantiated only once and is reused by each test case.
        TreeLinkNode *fake_head, *tail;
        fake_head = tail = new TreeLinkNode(0);
        if (root != NULL) insert_node(tail, root);
        int cnt = 1;
        while (fake_head->next != NULL) {
            int new_cnt = 0;
            for (int i = 1; i <= cnt; i++) {
                TreeLinkNode *front = delete_node(fake_head, tail);
                if (i < cnt)
                    front->next = fake_head->next;
                else
                    front->next = NULL;
                if (front->left != NULL) {
                    new_cnt++;
                    insert_node(tail, front->left);
                }
                if (front->right != NULL) {
                    new_cnt++;
                    insert_node(tail, front->right);
                }
            }
            cnt = new_cnt;
        }
        delete fake_head;
    }
};
原创粉丝点击