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)的主要内容,如果未能解决你的问题,请参考以下文章
Leetcode 116. 填充每个节点的下一个右侧节点指针
LeetCode 116. 填充每个节点的下一个右侧节点指针
Leetcode No.116 填充每个节点的下一个右侧节点指针