Skip to content

Commit 1b20c56

Browse files
Merge branch 'master' into master
2 parents 28a4915 + 4a2c860 commit 1b20c56

11 files changed

Lines changed: 367 additions & 87 deletions

File tree

tutorials/learn-c.org/en/Binary trees.md

Lines changed: 154 additions & 65 deletions
Original file line numberDiff line numberDiff line change
@@ -19,104 +19,193 @@ Exercise
1919

2020
Below is an implementation of a binary tree that has insertion and printing capabilities. This tree is ordered but not balanced. This example maintains its ordering at insertion time.
2121

22+
Change the print routine to depth-first search **pre-order**.
23+
2224

2325
Tutorial Code
2426
-------------
2527

2628
#include <stdio.h>
2729
#include <stdlib.h>
28-
29-
typedef struct node {
30+
31+
typedef struct node
32+
{
3033
int val;
3134
struct node * left;
32-
struct node * right;} node_t;
33-
35+
struct node * right;
36+
} node_t;
37+
3438
void insert(node_t * tree,int val);
3539
void print_tree(node_t * current);
3640
void printDFS(node_t * current);
37-
38-
int main() {
41+
42+
int main()
43+
{
3944
node_t * test_list = malloc(sizeof(node_t));
45+
/* set values explicitly, alternative would be calloc() */
46+
test_list->val = 0;
47+
test_list->left = NULL;
48+
test_list->right = NULL;
49+
4050
insert(test_list,5);
4151
insert(test_list,8);
4252
insert(test_list,4);
4353
insert(test_list,3);
44-
printDFS(test_list);}
45-
46-
void insert(node_t * tree,int val){
47-
if(tree->val==NULL)tree->val=val;
48-
else if(val<tree->val)
49-
if(tree->left!=NULL)insert(tree->left,val);
50-
else{
51-
tree->left=malloc(sizeof(node_t));
52-
tree->left->val=val; }
53-
else if(val>=tree->val)
54-
if(tree->right!=NULL)insert(tree->right,val);
55-
else{
56-
tree->right=malloc(sizeof(node_t));
57-
tree->right->val=val;} }
58-
59-
void print_tree(node_t * current) {
60-
if(current!=NULL)printf("\n%d ",current->val);
61-
if(current->left!=NULL) printf("L%d ",current->left->val);
62-
if(current->right!=NULL)printf(" R%d",current->right->val);
63-
if(current->left!=NULL) print_tree(current->left);
64-
if(current->right!=NULL)print_tree(current->right);}
65-
66-
void printDFS(node_t * current) {
67-
if(current->left!=NULL) printDFS(current->left);
68-
if(current!=NULL)printf("%d ",current->val);
69-
if(current->right!=NULL)printDFS(current->right);}
54+
55+
printDFS(test_list);
56+
printf("\n");
57+
}
58+
59+
void insert(node_t * tree, int val)
60+
{
61+
if (tree->val == 0)
62+
{
63+
/* insert on current (empty) position */
64+
tree->val=val;
65+
}
66+
else
67+
{
68+
if (val < tree->val)
69+
{
70+
/* insert left */
71+
if (tree->left != NULL)
72+
{
73+
insert(tree->left, val);
74+
}
75+
else
76+
{
77+
tree->left = malloc(sizeof(node_t));
78+
/* set values explicitly, alternative would be calloc() */
79+
tree->left->val = val;
80+
tree->left->left = NULL;
81+
tree->left->right = NULL;
82+
}
83+
}
84+
else
85+
{
86+
if (val >= tree->val)
87+
{
88+
/* insert right */
89+
if (tree->right != NULL)
90+
{
91+
insert(tree->right,val);
92+
}
93+
else
94+
{
95+
tree->right=malloc(sizeof(node_t));
96+
/* set values explicitly, alternative would be calloc() */
97+
tree->right->val=val;
98+
tree->right->left = NULL;
99+
tree->right->right = NULL;
100+
}
101+
}
102+
}
103+
}
104+
}
105+
106+
/* depth-first search */
107+
void printDFS(node_t * current)
108+
{
109+
/* change the code here */
110+
if (current == NULL) return; /* security measure */
111+
if (current->left != NULL) printDFS(current->left);
112+
if (current != NULL) printf("%d ", current->val);
113+
if (current->right != NULL) printDFS(current->right);
114+
}
115+
70116

71117
Expected Output
72118
---------------
73119

74-
1 2 3 4
120+
5 4 3 8
75121

76122
Solution
77123
--------
78124

79125
#include <stdio.h>
80126
#include <stdlib.h>
81-
82-
typedef struct node {
127+
128+
typedef struct node
129+
{
83130
int val;
84131
struct node * left;
85-
struct node * right;} node_t;
86-
132+
struct node * right;
133+
} node_t;
134+
87135
void insert(node_t * tree,int val);
88136
void print_tree(node_t * current);
89137
void printDFS(node_t * current);
90-
91-
int main() {
138+
139+
int main()
140+
{
92141
node_t * test_list = malloc(sizeof(node_t));
142+
/* set values explicitly, alternative would be calloc() */
143+
test_list->val = 0;
144+
test_list->left = NULL;
145+
test_list->right = NULL;
146+
93147
insert(test_list,5);
94148
insert(test_list,8);
95149
insert(test_list,4);
96150
insert(test_list,3);
97-
printDFS(test_list);}
98-
99-
void insert(node_t * tree,int val){
100-
if(tree->val=='\0')tree->val=val;
101-
else if(val<tree->val)
102-
if(tree->left!=NULL)insert(tree->left,val);
103-
else{
104-
tree->left=malloc(sizeof(node_t));
105-
tree->left->val=val; }
106-
else if(val>=tree->val)
107-
if(tree->right!=NULL)insert(tree->right,val);
108-
else{
109-
tree->right=malloc(sizeof(node_t));
110-
tree->right->val=val;} }
111-
112-
void print_tree(node_t * current) {
113-
if(current!=NULL)printf("\n%d ",current->val);
114-
if(current->left!=NULL) printf("L%d ",current->left->val);
115-
if(current->right!=NULL)printf(" R%d",current->right->val);
116-
if(current->left!=NULL) print_tree(current->left);
117-
if(current->right!=NULL)print_tree(current->right);}
118-
119-
void printDFS(node_t * current) {
120-
if(current->left!=NULL) printDFS(current->left);
121-
if(current!=NULL)printf("%d ",current->val);
122-
if(current->right!=NULL)printDFS(current->right);}
151+
152+
printDFS(test_list);
153+
printf("\n");
154+
}
155+
156+
void insert(node_t * tree, int val)
157+
{
158+
if (tree->val == 0)
159+
{
160+
/* insert on current (empty) position */
161+
tree->val=val;
162+
}
163+
else
164+
{
165+
if (val < tree->val)
166+
{
167+
/* insert left */
168+
if (tree->left != NULL)
169+
{
170+
insert(tree->left, val);
171+
}
172+
else
173+
{
174+
tree->left = malloc(sizeof(node_t));
175+
/* set values explicitly, alternative would be calloc() */
176+
tree->left->val = val;
177+
tree->left->left = NULL;
178+
tree->left->right = NULL;
179+
}
180+
}
181+
else
182+
{
183+
if (val >= tree->val)
184+
{
185+
/* insert right */
186+
if (tree->right != NULL)
187+
{
188+
insert(tree->right,val);
189+
}
190+
else
191+
{
192+
tree->right=malloc(sizeof(node_t));
193+
/* set values explicitly, alternative would be calloc() */
194+
tree->right->val=val;
195+
tree->right->left = NULL;
196+
tree->right->right = NULL;
197+
}
198+
}
199+
}
200+
}
201+
}
202+
203+
/* depth-first search */
204+
void printDFS(node_t * current)
205+
{
206+
/* change the code here */
207+
if (current == NULL) return; /* security measure */
208+
if (current != NULL) printf("%d ", current->val);
209+
if (current->left != NULL) printDFS(current->left);
210+
if (current->right != NULL) printDFS(current->right);
211+
}

tutorials/learncs.org/en/Basic Classes.md

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -41,7 +41,7 @@ Make a class `car` with the properties `numTires = 4`, `year = 2000`, and `runs
4141
Tutorial Code
4242
-------------
4343
using System;
44-
public class Main{
44+
public class MainClass{
4545
public static void Main(){
4646

4747
// Test code
@@ -54,7 +54,7 @@ Expected Output
5454
---------------
5555
4
5656
2000
57-
true
57+
True
5858

5959
Solution
6060
--------
@@ -64,7 +64,7 @@ class car{
6464
public int year = 2000;
6565
public bool runs = true;
6666
}
67-
public class Main{
67+
public class MainClass{
6868
public static void Main(){
6969
car car1 = new car();
7070
car car2 = new car();

0 commit comments

Comments
 (0)