Leetcode 116. 填充同一層的兄弟節點 C++
阿新 • • 發佈:2018-11-25
題目描述
思路
本題是一個很典型的題,採用的方法就是樹的層序歷遍。通過一個佇列控制,每次迴圈處理一層的節點,下一次處理下一層的節點。關於樹的層序歷遍可以參看另外兩個題,可以有更深的認識。二叉樹的層次遍歷,二叉樹的鋸齒形層次遍歷.
解答
/**
* 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) return;
queue<TreeLinkNode*> q;
q.push(root);
while(!q.empty())
{
auto size = q.size();
TreeLinkNode* temp = q.front();
q.pop();
while (size--)
{
if(temp->left) q.push(temp->left);
if(temp->right) q.push(temp->right);
if(0 == size) temp->next=NULL;
else
{
TreeLinkNode* cur = q.front();
q. pop();
temp->next = cur;
temp=cur;
}
}
}
}
};