二叉树转双向链表 Posted on 2016-03-20 | Edited on 2018-06-23 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253class Node{ public: int val; Node * left; Node * right; Node(){val = 0;left = NULL; right = NULL;}};Node * process(Node * head){ if( head == NULL ) return NULL; Node * l = process(head->left); Node * r = process(head->right); if( l && r ) { head->left = l; head->right = r->right; r->right->left = head; r->right = l->right; l->right = head; return r; } else if( l ) { head->left = l; head->right = l->right; l->right = head; return head; } else if( r ) { head->left = NULL; head->right = r->right; r->right = head; return r; } else { head->right = head; head->left = NULL; return head; }}Node * tree2list(Node * head){ if( head == NULL ) return NULL; Node *last = process(head); head = last->right; last->right = NULL; return head;}