LeetCode Populating Next Right Pointers in Each Node
Given a binary tree
struct TreeLinkNode {
TreeLinkNode *left;
TreeLinkNode *right;
TreeLinkNode *next;
}
Populate each next pointer to point to its next right node. If there is no next right node, the next pointer should be set to NULL.
Initially, all next pointers are set to NULL.
Note:
- You may only use constant extra space.
- You may assume that it is a perfect binary tree (ie, all leaves are at the same level, and every parent has two children).
For example,
Given the following perfect binary tree,
1
/ \
2 3
/ \ / \
4 5 6 7
After calling your function, the tree should look like:
1 -> NULL
/ \
2 -> 3 -> NULL
/ \ / \
4->5->6->7 -> NULL
方法一:队列,层次遍历
void connect(TreeLinkNode *root)
{
if(NULL == root)
return;
int row = 1;
int num = 0;
queue<TreeLinkNode*> qNode;
qNode.push(root);
while(!qNode.empty())
{
TreeLinkNode* front = qNode.front();
qNode.pop();
num ++;
if(front->left)
qNode.push(front->left);
if(front->right)
qNode.push(front->right);
if(num == row)
{
front->next = NULL;
num = 0;
row*=2;
}
else
{
front->next = qNode.front();
}
}
}方法二:递归
void connect(TreeLinkNode *root)
{
if(NULL == root)
return;
if(root->left)
{
root->left->next = root->right;
}
if(root->right)
{
root->right->next = root->next ? root->next->left:NULL;
}
connect(root->left);
connect(root->right);
}
本文详细介绍了如何使用队列和递归两种方法来解决LeetCode中关于填充每个节点的下一个右侧节点指针的问题,适用于完美二叉树。文章通过实例演示了层次遍历的方法,并解释了递归实现的思路。
2918

被折叠的 条评论
为什么被折叠?



