Convert binary search tree to sorted doubly linked list lintcode

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 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& 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& 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 };

Video liên quan

Chủ Đề