116.填充每个节点的下一个右侧节点指针(DFS)

Posted JasonPeng1

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了116.填充每个节点的下一个右侧节点指针(DFS)相关的知识,希望对你有一定的参考价值。

2019-12-27

08:52:23

解法1:DFS 递归解决

 

/*
// Definition for a Node.
class Node {
public:
    int val;
    Node* left;
    Node* right;
    Node* next;

    Node() : val(0), left(NULL), right(NULL), next(NULL) {}

    Node(int _val) : val(_val), left(NULL), right(NULL), next(NULL) {}

    Node(int _val, Node* _left, Node* _right, Node* _next)
        : val(_val), left(_left), right(_right), next(_next) {}
};
*/
class Solution {
public:
    int flag = 1;
    Node* connect(Node* root) {
        if(!root) return NULL;
        if(flag){
            root->next = NULL;
            flag = 0;
        }
        if(!(root->left)){
            return root;
        }
        else root->left->next = root->right;
        if(root->next){
            root->right->next = root->next->left;
        }else{
            root->right->next = nullptr;
        }
        connect(root->left);
        connect(root->right);
        return root;
    }
};
 

解法2: BFS 迭代

 

 

/*
// Definition for a Node.
class Node {
public:
    int val;
    Node* left;
    Node* right;
    Node* next;

    Node() : val(0), left(NULL), right(NULL), next(NULL) {}

    Node(int _val) : val(_val), left(NULL), right(NULL), next(NULL) {}

    Node(int _val, Node* _left, Node* _right, Node* _next)
        : val(_val), left(_left), right(_right), next(_next) {}
};
*/
class Solution {
public:
    Node* connect(Node* root) {
        Node *now = root;
        while(now != NULL){
            Node *temp = now;
            while(temp!=NULL){
                if(temp->left != NULL){
                    temp->left->next = temp->right;
                }
                if(temp->right != NULL && temp->next != NULL){
                    temp->right->next = temp->next->left;
                }
                temp = temp->next;
            }
            now = now->left;
        }
        return root;
    }
};

以上是关于116.填充每个节点的下一个右侧节点指针(DFS)的主要内容,如果未能解决你的问题,请参考以下文章

刷题-力扣-116. 填充每个节点的下一个右侧节点指针

Leetcode 116. 填充每个节点的下一个右侧节点指针

LeetCode 116. 填充每个节点的下一个右侧节点指针

Leetcode No.116 填充每个节点的下一个右侧节点指针

LeetCode第116题—填充每个节点的下一个右侧节点指针—Python实现

LeetCode Algorithm 116. 填充每个节点的下一个右侧节点指针