这道题不是什么非常棒的解法, 今天时间有限, 只好简略修改 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;
}
}
};