LeetCode·116. Populating Next Right Pointers in Each Node

思路:按行遍歷完全二叉樹

/**
 * Definition for binary tree with next pointer.
 * struct TreeLinkNode {
 *  int val;
 *  TreeLinkNode *left, *right, *next;
 *  TreeLinkNode(int x) : val(x), left(NULL), right(NULL), next(NULL) {}
 * };
 */
class Solution {
public:
    void connect(TreeLinkNode *root) {
        if(root == NULL)return;

        queue<TreeLinkNode*> vec;
        vec.push(root);
        TreeLinkNode *pre;
        TreeLinkNode *node;
        TreeLinkNode *r = root;
        TreeLinkNode *f = root;

        while(!vec.empty()){
            pre = vec.front();
            node = vec.front();
            vec.pop();
            if(pre->left != NULL){
                vec.push(pre->left);
            }
            if(pre->right != NULL){
                vec.push(pre->right);
                r = pre->right;
            }

            while(node != f){
                node = vec.front();
                vec.pop();
                pre->next = node;
                pre = node;

                if(node->left != NULL){
                    vec.push(node->left);
                }
                if(node->right != NULL){
                    vec.push(node->right);
                    r = node->right;
                }
            }

            node->next = NULL;
            f = r;
        }
    }
};


這裏寫圖片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章