这道题不是什么非常棒的解法, 今天时间有限, 只好简略修改 10. Populating Next Right Pointers in Each Node 的解决方案.

基本上是对各种意外情况做了处理, 感觉是打补丁式的解法. 思维太懒了…

如有更好的思路, 或者可以帮我简化的地方, 希望告知.

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) {
    while (root and (root->left or root->right)) {
      if (root->left and root->right)
        root->left->next = root->right;
      for (TreeLinkNode *cur = root, *find = root->next; find; find = find->next) {
        if (!find->left and !find->right) continue;
        if (find->left and find->right)
          find->left->next = find->right;
          (cur->right ? cur->right->next : cur->left->next) = find->left ? find->left : find->right;
          cur = find;
      }
      root = root->left ? root->left : root->right;
      while (root->next && !root->left and !root->right) root = root->next;
    }
  }
};

LeetCode Direct Link