Skip to content

Commit f6424fd

Browse files
authored
Create BST2.cpp
1 parent 262265f commit f6424fd

File tree

1 file changed

+54
-0
lines changed

1 file changed

+54
-0
lines changed

Topic/Solution/BST2.cpp

Lines changed: 54 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,54 @@
1+
/**
2+
* Definition for singly-linked list.
3+
* struct ListNode {
4+
* int val;
5+
* ListNode *next;
6+
* ListNode() : val(0), next(nullptr) {}
7+
* ListNode(int x) : val(x), next(nullptr) {}
8+
* ListNode(int x, ListNode *next) : val(x), next(next) {}
9+
* };
10+
*/
11+
/**
12+
* Definition for a binary tree node.
13+
* struct TreeNode {
14+
* int val;
15+
* TreeNode *left;
16+
* TreeNode *right;
17+
* TreeNode() : val(0), left(nullptr), right(nullptr) {}
18+
* TreeNode(int x) : val(x), left(nullptr), right(nullptr) {}
19+
* TreeNode(int x, TreeNode *left, TreeNode *right) : val(x), left(left), right(right) {}
20+
* };
21+
*/
22+
class Solution {
23+
public:
24+
ListNode* middle( ListNode* head){
25+
ListNode* slow=head;
26+
ListNode* fast =head;
27+
ListNode* prev= NULL;
28+
while( fast && fast->next){
29+
prev = slow;
30+
slow = slow->next;
31+
fast = fast->next->next;
32+
}
33+
// slow is the mid
34+
// when only head , prev is NULL
35+
if ( prev)
36+
prev->next=NULL;
37+
return slow;
38+
}
39+
40+
41+
TreeNode* sortedListToBST(ListNode* head) {
42+
43+
if (!head) return NULL;
44+
// find middle
45+
ListNode* mid = middle( head);
46+
TreeNode * node = new TreeNode( mid->val);
47+
48+
if ( head == mid) return node;
49+
node->left = sortedListToBST( head);
50+
node->right = sortedListToBST(mid->next);
51+
return node;
52+
53+
}
54+
};

0 commit comments

Comments
 (0)