Convert a binary search tree to doubly linked list with in-order traversal.
Example
Given a binary search tree:
4
/
2 5
/
1 3
return 1<->2<->3<->4<->5
Runtime: 15ms
1 /** 2 * Definition of TreeNode: 3 * class TreeNode { 4 * public: 5 * int val; 6 * TreeNode *left, *right; 7 * TreeNode(int val) { 8 * this->val = val; 9 * this->left = this->right = NULL; 10 * } 11 * } 12 * Definition of Doubly-ListNode 13 * class DoublyListNode { 14 * public: 15 * int val; 16 * DoublyListNode *next, *prev; 17 * DoublyListNode(int val) { 18 * this->val = val; 19 this->prev = this->next = NULL; 20 * } 21 * } 22 */ 23 class Solution { 24 public: 25 /** 26 * @param root: The root of tree 27 * @return: the head of doubly list node 28 */ 29 DoublyListNode* bstToDoublyList(TreeNode* root) { 30 // Write your code here 31 32 // do inorder traversal first 33 vector<int> inorderStore; 34 inorder(root, inorderStore); 35 36 // use the values in vector to construct a double linked list 37 DoublyListNode* pre= new DoublyListNode(0); 38 return constructDoubleList(inorderStore, pre); 39 } 40 private: 41 void inorder(TreeNode* root, vector<int>& inorderStore) { 42 if(!root) return; 43 inorder(root->left, inorderStore); 44 inorderStore.push_back(root->val); 45 inorder(root->right, inorderStore); 46 } 47 48 DoublyListNode* constructDoubleList(vector<int>& inorderStore, DoublyListNode* pre) { 49 if(inorderStore.empty()) return NULL; 50 51 DoublyListNode* move = pre; 52 for (int i = 0; i < inorderStore.size(); i++) { 53 DoublyListNode* temp = new DoublyListNode(inorderStore[i]); 54 move->next = temp; 55 move = move->next; 56 } 57 58 DoublyListNode* head = pre->next; 59 head->prev = NULL; 60 return head; 61 } 62 };