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