日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

LeetCode OJ - Populating Next Right Pointers in Each Node II

發布時間:2023/12/10 编程问答 39 豆豆
生活随笔 收集整理的這篇文章主要介紹了 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,

1/ \2 3/ \ \4 5 7

?

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的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。