简单:
TreeNode * convert(TreeNode * root) {
if (! root) return NULL;
TreeNode * head = NULL, * tail = NULL;
stack s;
TreeNode * n = root;
while (1) {
while (n) {
s.push(n);
n = n->left;
}
if (s.empty()) {
if (head) {
head->left = tail;
tail->right = head;
}
break;
}
else {
TreeNode * tmp = s.top();
s.pop();
n = tmp->right;
cout << tmp->val << endl;
append(tmp, head, tail);
}
}
return head;
}
void append(TreeNode * t, TreeNode *& head, TreeNode *& tail) {
if (head == NULL) {
head = tail = t;
t->left = t->right = NULL;
}
else {
tail->right = t;
t->left = tail;
t->right = NULL;
tail = t;
}
}