#include <stdio.h>
struct Node {
Node(Node *left, Node *right, int val) : left(left), right(right), next(NULL), val(val) {}
Node *left, *right, *next;
int val;
};
void LinkTreeWithoutNils (Node* node)
{
if (!node)
return;
Node *left = node->left, *right = node->right;
LinkTreeWithoutNils(left);
LinkTreeWithoutNils(right);
while (left)
{
left->next = right;
left = left->right ? left->right : left->left;
if (right) right = right->left;
}
}
void LinkTree (Node* node)
{
LinkTreeWithoutNils(node);
Node* right = node;
while (right)
{
right->next = NULL;
right = right->right;
}
}
void ShowNode(Node *node)
{
printf("val=%d left=%d right=%d next=%d\n", node->val,
node->left ? node->left->val : -1,
node->right ? node->right->val : -1,
node->next ? node->next->val : -1);
}
int main(void) {
Node leaf1(NULL, NULL, 1);
Node leaf2(NULL, NULL, 3);
Node mid1(&leaf1, NULL, 4);
Node mid2(NULL, &leaf2, 5);
Node root(&mid1, &mid2, 6);
LinkTree(&root);
ShowNode(&leaf1);
ShowNode(&leaf2);
ShowNode(&mid1);
ShowNode(&mid2);
ShowNode(&root);
return 0;
}
I2luY2x1ZGUgPHN0ZGlvLmg+CiAKc3RydWN0IE5vZGUgewoJTm9kZShOb2RlICpsZWZ0LCBOb2RlICpyaWdodCwgaW50IHZhbCkgOiBsZWZ0KGxlZnQpLCByaWdodChyaWdodCksIG5leHQoTlVMTCksIHZhbCh2YWwpIHt9CglOb2RlICpsZWZ0LCAqcmlnaHQsICpuZXh0OwoJaW50IHZhbDsKfTsKIAp2b2lkIExpbmtUcmVlV2l0aG91dE5pbHMgKE5vZGUqIG5vZGUpCnsKICBpZiAoIW5vZGUpIAogICAgcmV0dXJuOwogIE5vZGUgKmxlZnQgPSBub2RlLT5sZWZ0LCAqcmlnaHQgPSBub2RlLT5yaWdodDsKICBMaW5rVHJlZVdpdGhvdXROaWxzKGxlZnQpOwogIExpbmtUcmVlV2l0aG91dE5pbHMocmlnaHQpOwogIHdoaWxlIChsZWZ0KQogIHsKICAgIGxlZnQtPm5leHQgPSByaWdodDsKICAgIGxlZnQgPSBsZWZ0LT5yaWdodCA/IGxlZnQtPnJpZ2h0IDogbGVmdC0+bGVmdDsKICAgIGlmIChyaWdodCkgcmlnaHQgPSByaWdodC0+bGVmdDsKICB9ICAgIAp9CiAKdm9pZCBMaW5rVHJlZSAoTm9kZSogbm9kZSkKewogIExpbmtUcmVlV2l0aG91dE5pbHMobm9kZSk7ICAKICBOb2RlKiByaWdodCA9IG5vZGU7CiAgd2hpbGUgKHJpZ2h0KQogIHsKICAgIHJpZ2h0LT5uZXh0ID0gTlVMTDsKICAgIHJpZ2h0ID0gcmlnaHQtPnJpZ2h0OwogIH0KfQogCnZvaWQgU2hvd05vZGUoTm9kZSAqbm9kZSkKewoJcHJpbnRmKCJ2YWw9JWQgbGVmdD0lZCByaWdodD0lZCBuZXh0PSVkXG4iLCBub2RlLT52YWwsCgkgICAgbm9kZS0+bGVmdCA/IG5vZGUtPmxlZnQtPnZhbCA6IC0xLAoJICAgIG5vZGUtPnJpZ2h0ID8gbm9kZS0+cmlnaHQtPnZhbCA6IC0xLAoJICAgIG5vZGUtPm5leHQgPyBub2RlLT5uZXh0LT52YWwgOiAtMSk7Cn0KIAppbnQgbWFpbih2b2lkKSB7CglOb2RlIGxlYWYxKE5VTEwsIE5VTEwsIDEpOwoJTm9kZSBsZWFmMihOVUxMLCBOVUxMLCAzKTsKCU5vZGUgbWlkMSgmbGVhZjEsIE5VTEwsIDQpOwoJTm9kZSBtaWQyKE5VTEwsICZsZWFmMiwgNSk7CglOb2RlIHJvb3QoJm1pZDEsICZtaWQyLCA2KTsKCUxpbmtUcmVlKCZyb290KTsKIAoJU2hvd05vZGUoJmxlYWYxKTsKCVNob3dOb2RlKCZsZWFmMik7CglTaG93Tm9kZSgmbWlkMSk7CglTaG93Tm9kZSgmbWlkMik7CglTaG93Tm9kZSgmcm9vdCk7CglyZXR1cm4gMDsKfQ==