LeetCode刷题笔记 117. 填充每个节点的下一个右侧节点指针 II

117. 填充每个节点的下一个右侧节点指针 II

题目要求

117. 填充每个节点的下一个右侧节点指针 II

题解

https://github.com/soulmachine/leetcode

递归

class Solution {
public:
    Node* connect(Node* root) {
        if(!root) return root;
        Node dummy(-1);
        for(Node *cur=root,*pre=&dummy;cur;cur=cur->next){
            if(cur->left){
                pre->next=cur->left;
                pre=pre->next;
            }
            if(cur->right){
                pre->next=cur->right;
                pre=pre->next;
            }
        }
        connect(dummy.next);
        return root;
    }    
};

迭代

class Solution {
public:
    Node* connect(Node* root) {
        Node *cur=root;
        while(cur){
            Node *next=nullptr;
            Node *pre=nullptr;
            for(;cur;cur=cur->next){
                if(!next) next=cur->left?cur->left:cur->right;
                if(cur->left){
                    if(pre) pre->next=cur->left;
                    pre=cur->left;
                }
                if(cur->right){
                    if(pre) pre->next=cur->right;
                    pre=cur->right;
                }                
            }
            cur=next;
        }
        return root;
    }
};
发布了17 篇原创文章 · 获赞 0 · 访问量 2176

猜你喜欢

转载自blog.csdn.net/g534441921/article/details/104278230
今日推荐