Leetcode 117. Populating Next Right Pointers in Each Node II
文章作者:Tyan
部落格:noahsnail.com | CSDN | 簡書
1. Description
2. Solution
- Version 1
/**
* 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) {
return;
}
queue<TreeLinkNode*> q1;
q1.push(root);
queue<TreeLinkNode*> q2;
TreeLinkNode* pre = nullptr;
TreeLinkNode* current = nullptr;
while(!q1.empty()) {
current = q1.front();
q1.pop();
if(current->left) {
q2.push(current->left);
}
if(current->right) {
q2.push(current->right);
}
if(pre) {
pre->next = current;
}
pre = current;
if(q1.empty()) {
q1 = q2;
q2 = {};
pre = nullptr;
}
}
}
};
- Version 2
/**
* 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) {
return;
}
queue<TreeLinkNode*> q;
q.push(root);
connect(q);
}
private:
void connect(queue<TreeLinkNode*>& q) {
TreeLinkNode* pre = nullptr;
TreeLinkNode* current = nullptr;
queue<TreeLinkNode*> q2;
while(!q.empty()) {
current = q.front();
q.pop();
if(current->left) {
q2.push(current->left);
}
if(current->right) {
q2.push(current->right);
}
if(pre) {
pre->next = current;
}
pre = current;
}
if(!q2.empty()) {
connect(q2);
}
}
};
- Version 3
/**
* 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) {
return;
}
TreeLinkNode* parent = root;
TreeLinkNode* head = new TreeLinkNode(0);
while(root) {
parent = root;
TreeLinkNode* current = head;
while(parent) {
if(parent->left && parent->right) {
current->next = parent->left;
current->next->next = parent->right;
current = parent->right;
}
else if(parent->left) {
current->next = parent->left;
current = parent->left;
}
else if(parent->right){
current->next = parent->right;
current = parent->right;
}
parent = parent->next;
}
current->next = nullptr;
root = head->next;
}
delete head;
}
};
Reference
相關文章
- 117. Populating Next Right Pointers in Each Node II
- 117-Populating Next Right Pointers in Each Node II
- 116-Populating Next Right Pointers in Each Node
- [LeetCode] 2516. Take K of Each Character From Left and RightLeetCode
- [LeetCode] 2070. Most Beautiful Item for Each QueryLeetCode
- Leetcode 31 Next PermutationLeetCode
- leetcode-90. Subsets IILeetCode
- Leetcode 40 Combination Sum IILeetCode
- Leetcode 213 House Robber IILeetCode
- LeetCode 1103[分糖果II]LeetCode
- [LeetCode] 210. Course Schedule IILeetCode
- [LeetCode] 305. Number of Islands IILeetCode
- [LeetCode] 212. Word Search IILeetCode
- [Leetcode]253. Meeting Rooms IILeetCodeOOM
- [LeetCode] 2105. Watering Plants IILeetCode
- LeetCode 52. N皇后 IILeetCode
- [leetcode]linked-list-cycle-iiLeetCode
- leetcode 219. Contains Duplicate IILeetCodeAI
- [LeetCode] 910. Smallest Range IILeetCode
- [LeetCode] 45. Jump Game IILeetCodeGAM
- LeetCode-047-全排列 IILeetCode
- Leetcode 137. Single Number IILeetCode
- [LeetCode] 3152. Special Array IILeetCode
- [LeetCode] 681. Next Closest TimeLeetCode
- Function pointers and callbacksFunction
- Leetcode 685. Redundant Connection II JavascriptLeetCodeJavaScript
- [LeetCode] 244. Shortest Word Distance IILeetCode
- LeetCode - 113 - 路徑總和 IILeetCode
- leetcode 350. Intersection of Two Arrays IILeetCode
- leetcode力扣 213. 打家劫舍 IILeetCode力扣
- Leetcode 142. Linked List Cycle IILeetCode
- LeetCode-063-不同路徑IILeetCode
- leetcode:組合總和II(回溯java)LeetCodeJava
- LeetCode題解(0407):接雨水II(Python)LeetCodePython
- [leetcode]remove-duplicates-from-sorted-array-iiLeetCodeREM
- [Leetcode]下一個更大元素IILeetCode
- Leetcode——113. 路徑總和 IILeetCode
- [leetcode 92] 反轉連結串列 IILeetCode