Files
leetcode-master/problems/0117.填充每个节点的下一个右侧节点指针II.md
youngyangyang04 9ab4d90aed Update
2020-10-16 08:35:19 +08:00

1.2 KiB

链接

https://leetcode-cn.com/problems/populating-next-right-pointers-in-each-node-ii/

思路

这道题目使用递归还是有难度的,不是完美二叉树,应该怎么办。

C++代码

class Solution {
public:
    Node* connect(Node* root) {
        queue<Node*> que;
        if (root != NULL) que.push(root);
        while (!que.empty()) {
            int size = que.size();
            vector<int> vec;
            Node* nodePre;
            Node* node;
            for (int i = 0; i < size; i++) {
                if (i == 0) {
                    nodePre = que.front(); // 取出一层的头结点
                    que.pop();
                    node = nodePre;
                } else {
                    node = que.front();
                    que.pop();
                    nodePre->next = node; // 本层前一个节点next指向本节点
                    nodePre = nodePre->next;
                }
                if (node->left) que.push(node->left);
                if (node->right) que.push(node->right);
            }
            nodePre->next = NULL; // 本层最后一个节点指向NULL
        }
        return root;
    }
};