篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了117. Populating Next Right Pointers in Each Node II相关的知识,希望对你有一定的参考价值。
117. 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
解析
// Populating Next Right Pointers in Each Node
class Solution_117 {
public:
//运行时间:8ms
//占用内存:892k
//使用层次遍历,每一层从左到右串接起来就行,每层最后一个元素next置NULL即可!
void connect(TreeLinkNode *root) {
if (!root)
{
return;
}
queue<TreeLinkNode*> que;
que.push(root);
while (!que.empty())
{
int size = que.size(); //每一层的大小
TreeLinkNode* cur, *pre=NULL;
while (size--)
{
cur= que.front();
que.pop();
if (pre)
{
pre->next = cur;
}
pre = cur;
if (cur->left)
{
que.push(cur->left);
}
if (cur->right)
{
que.push(cur->right);
}
}
cur->next = NULL;
}
}
void connect1(TreeLinkNode *root) {
queue<TreeLinkNode*> q;
if (!root)
return;
q.push(root);
while (!q.empty()) {
int size = q.size();
for (int i = 0; i < size; i++) {
TreeLinkNode* node = q.front();
q.pop();
if (i == size - 1)
node->next = nullptr;
else
node->next = q.front();//当前节点已经出栈, q.front()为下一节点,避免记录上一次节点
if (node->left)
q.push(node->left);
if (node->right)
q.push(node->right);
}
}
}
};
以上是关于117. Populating Next Right Pointers in Each Node II的主要内容,如果未能解决你的问题,请参考以下文章