//from http://blog.csdn.net/yuanbohx/article/details/26668825
思路:
很棒的一道题,可以认为是先序遍历。
(1)根据题述:左孩子为空,则右孩子一定为空,所以左孩子为空,则return
(2)如果左孩子不为空,则右孩子一定不为空,所以链接左孩子和右孩子即可(左孩子的next赋值为右孩子)
(3)由于先序遍历,所以父节点的next比子节点的next先被设置,故父节点不同的两个子节点进行连接,就可以用到父节点的next,整题的精华便是:root->right->next = root->right
/**
* 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==NULL||root->left==NULL)
return;
root->left->next=root->right;
if(root->next!=NULL)
root->right->next=root->next->left;
connect(root->left);
connect(root->right);
}
};