LeetCode OJ - Populating Next Right Pointers in Each Node II
生活随笔
收集整理的這篇文章主要介紹了
LeetCode OJ - Populating Next Right Pointers in Each Node II
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
題目:
Follow up for problem "Populating Next Right Pointers in Each Node".
What if the given tree could be any binary tree? Would your previous solution still work?
Note:
- You may only use constant extra space.
?
For example,
Given the following binary tree,
?
After calling your function, the tree should look like:
1 -> NULL/ \2 -> 3 -> NULL/ \ \4-> 5 -> 7 -> NULL解題思路:
方法一:直接進行廣度優先遍歷,在遍歷的過程中對next指針賦值。
方法二:可以利用生成的next指針來橫向掃描,即得到一層的next指針之后,可以利用這一層的next指針來給下一層的next指針賦值。
代碼:
方法一代碼:
/*** 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*> one;queue<TreeLinkNode*> another;one.push(root);TreeLinkNode* cur;TreeLinkNode* next;while(!(one.empty() && another.empty())) {if (!one.empty()) {cur = one.front();one.pop();if (cur->left != NULL) another.push(cur->left);if (cur->right != NULL) another.push(cur->right);while (!one.empty()) {next = one.front();one.pop();if (next->left != NULL) another.push(next->left);if (next->right != NULL) another.push(next->right);cur->next = next;cur = next;} cur->next = NULL;}if (!another.empty()) {cur = another.front();another.pop();if (cur->left != NULL) one.push(cur->left);if (cur->right != NULL) one.push(cur->right);while (!another.empty()) {next = another.front();another.pop();if (next->left != NULL) one.push(next->left);if (next->right != NULL) one.push(next->right);cur->next = next;cur = next;} cur->next = NULL;}}} };
方法二代碼:
/*** 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:TreeLinkNode *findNext(TreeLinkNode *head){while(head != NULL && head->left == NULL && head->right == NULL)head = head->next;return head;}void connect(TreeLinkNode *root) {if(root == NULL) return;TreeLinkNode *head, *last, *nexhead;for(head = root; head != NULL; head = nexhead){head = findNext(head);if(head == NULL) break;if(head->left != NULL) nexhead = head->left;else nexhead = head->right;for(last = NULL; head != NULL; last = head, head = findNext(head->next)){if(head->left != NULL && head->right != NULL)head->left->next = head->right;if(last == NULL) continue;if(last->right != NULL) last->right->next = head->left != NULL ? head->left : head->right;else last->left->next = head->left != NULL ? head->left : head->right;}}} };?
轉載于:https://www.cnblogs.com/dongguangqing/p/3727925.html
創作挑戰賽新人創作獎勵來咯,堅持創作打卡瓜分現金大獎總結
以上是生活随笔為你收集整理的LeetCode OJ - Populating Next Right Pointers in Each Node II的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: java xml导出_java 导出xm
- 下一篇: 《软件体系结构》 第七章 基于体系结构的