解题思路:
宽度搜索。
1,增加一个queue记录height;
2,从queue出来的node,如果与前一个node的height一样,则让前一个node->next = curnode;
3,每次循环,都更新preNode 和preHeight;
/**
* 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) {
queue<TreeLinkNode* > qNodes;
queue<int> qHeight;
qNodes.push(root);
qHeight.push(0);
TreeLinkNode* preNode = NULL;
int preHeight = -1;
while(!qNodes.empty()){
TreeLinkNode* curNode = qNodes.front(); qNodes.pop();
int curHeight = qHeight.front(); qHeight.pop();
if (curNode != NULL){
if (curHeight == preHeight){
preNode->next = curNode;
}
preNode = curNode;
preHeight = curHeight;
qNodes.push(curNode->left);
qHeight.push(curHeight + 1);
qNodes.push(curNode->right);
qHeight.push(curHeight + 1);
}
}
}
};