给定一个二叉树
struct Node { int val; Node *left; Node *right; Node *next; }
填充它的每个 next 指针,让这个指针指向其下一个右侧节点。如果找不到下一个右侧节点,则将 next 指针设置为 NULL。
初始状态下,所有 next 指针都被设置为 NULL。
算法思想:用队列层次遍历树,首先把根节点放入队列,并且每次记录队列大小k,然后将k个元素依次出队,依次加入每个元素的左孩子、右孩子,再循环。这样保证每趟遍历的都是同一层的结点。
Node* connect(Node* root) { if(!root){ return root; } queue<Node*> q; q.push(root); while(!q.empty()){ int len=q.size(); Node* pre=q.front(); for(int i=0;i<len;i++){ Node* p=q.front(); if(p->left){ q.push(p->left); } if(p->right){ q.push(p->right); } q.pop(); if(i!=0){ pre->next=p; pre=p; } } } return root; }