File tree Expand file tree Collapse file tree 4 files changed +126
-0
lines changed
109_convert_sorted_list_to_binary_search_tree
114_flatten_binary_tree_to_linked_list Expand file tree Collapse file tree 4 files changed +126
-0
lines changed Original file line number Diff line number Diff line change 1+ all :
2+ gcc -O2 -o test bst_convert.c
Original file line number Diff line number Diff line change 1+ #include <stdio.h>
2+ #include <stdlib.h>
3+
4+ struct ListNode {
5+ int val ;
6+ struct ListNode * next ;
7+ };
8+
9+ struct TreeNode {
10+ int val ;
11+ struct TreeNode * left ;
12+ struct TreeNode * right ;
13+ };
14+
15+ static struct TreeNode * recursive (int * nums , int lo , int hi )
16+ {
17+ int mid = lo + (hi - lo ) / 2 ;
18+ struct TreeNode * node = malloc (sizeof (* node ));
19+ node -> val = nums [mid ];
20+ node -> left = mid > lo ? recursive (nums , lo , mid - 1 ) : NULL ;
21+ node -> right = mid < hi ? recursive (nums , mid + 1 , hi ) : NULL ;
22+ return node ;
23+ }
24+
25+ static struct TreeNode * sortedListToBST (struct ListNode * head )
26+ {
27+ int i , nums [10000 ];
28+ for (i = 0 ; head != NULL ; head = head -> next , i ++ ) {
29+ nums [i ] = head -> val ;
30+ }
31+ if (i == 0 ) {
32+ return NULL ;
33+ }
34+ return recursive (nums , 0 , i - 1 );
35+ }
36+
37+ int main (int argc , char * * argv )
38+ {
39+ sortedListToBST (NULL );
40+ return 0 ;
41+ }
Original file line number Diff line number Diff line change 1+ all :
2+ gcc -O2 -o test flatten.c
Original file line number Diff line number Diff line change 1+ #include <stdio.h>
2+ #include <stdlib.h>
3+ #include <string.h>
4+
5+ struct TreeNode {
6+ int val ;
7+ struct TreeNode * left ;
8+ struct TreeNode * right ;
9+ };
10+
11+ static struct TreeNode * recursive (struct TreeNode * node )
12+ {
13+ if (node == NULL ) {
14+ return NULL ;
15+ }
16+
17+ if (node -> right == NULL && node -> left == NULL ) {
18+ return node ;
19+ }
20+
21+ struct TreeNode * right_last = recursive (node -> right );
22+ struct TreeNode * left_last = recursive (node -> left );
23+
24+ if (left_last != NULL ) {
25+ left_last -> right = node -> right ;
26+ node -> right = node -> left ;
27+ node -> left = NULL ;
28+ }
29+
30+ return right_last != NULL ? right_last : left_last ;
31+ }
32+
33+ static void flatten (struct TreeNode * root )
34+ {
35+ recursive (root );
36+ }
37+
38+ int main (void )
39+ {
40+ struct TreeNode root , n1 [2 ], n2 [4 ], n3 [8 ];
41+ root .val = 5 ;
42+ n1 [0 ].val = 4 ;
43+ n1 [1 ].val = 8 ;
44+ n2 [0 ].val = 11 ;
45+ n2 [2 ].val = 13 ;
46+ n2 [3 ].val = 4 ;
47+ n3 [0 ].val = 7 ;
48+ n3 [1 ].val = 2 ;
49+ n3 [6 ].val = 5 ;
50+ n3 [7 ].val = 1 ;
51+
52+ root .left = & n1 [0 ];
53+ root .right = & n1 [1 ];
54+ n1 [0 ].left = & n2 [0 ];
55+ n1 [0 ].right = NULL ;
56+ n1 [1 ].left = & n2 [2 ];
57+ n1 [1 ].right = & n2 [3 ];
58+ n2 [0 ].left = & n3 [0 ];
59+ n2 [0 ].right = & n3 [1 ];
60+ n2 [2 ].left = NULL ;
61+ n2 [2 ].right = NULL ;
62+ n2 [3 ].left = & n3 [6 ];
63+ n2 [3 ].right = & n3 [7 ];
64+ n3 [0 ].left = NULL ;
65+ n3 [0 ].right = NULL ;
66+ n3 [1 ].left = NULL ;
67+ n3 [1 ].right = NULL ;
68+ n3 [6 ].left = NULL ;
69+ n3 [6 ].right = NULL ;
70+ n3 [7 ].left = NULL ;
71+ n3 [7 ].right = NULL ;
72+
73+ flatten (& root );
74+
75+ struct TreeNode * p ;
76+ for (p = & root ; p != NULL ; p = p -> right ) {
77+ printf ("%d " , p -> val );
78+ }
79+ printf ("\n" );
80+ return 0 ;
81+ }
You can’t perform that action at this time.
0 commit comments