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题目改了下一般树的数据结构,加了个next指针,意思是把每行用next串接起来,并且是个满二叉树。看到每一行就想到层序遍历,既然是满二叉树,那每层开始肯定是有规律的,所以只需要一个队列就行了,还需要用pre指针记录上个节点,用一个count计数器,判断是否是每层的头,如果不是头则把现在这个节点接到pre后面。
class Solution {
public:
void connect(TreeLinkNode *root) {
if (root == NULL) return;
queue<TreeLinkNode *>Q;
Q.push(root);
int count = 0,up=0;//up表示次方,因为每层的头部就是2的up次方
TreeLinkNode *pre=NULL, *node=NULL;
while(!Q.empty()){
count++;
pre = node;
node = Q.front();
Q.pop();
if (node->left) Q.push(node->left);//左孩子入队列
if (node->right) Q.push(node->right);//右孩子入队列
if (count != pow(2, up))//判断是否是每一层的开头,如果不是则连接到pre后面
pre->next = node;
else
up++;
}
}
};