new file: lists/double_linked_list.c
new file: lists/ejudge/joseph.c new file: lists/ejudge/joseph_full.c new file: lists/ejudge/list3.c new file: lists/ejudge/list3_full.c new file: lists/list.c new file: trees/tree1.c new file: trees/tree2.c new file: trees/tree2_full.c new file: trees/tree4_full.c
This commit is contained in:
parent
6c827dcff8
commit
6161b74ffc
10 changed files with 1280 additions and 0 deletions
83
list_and_trees/trees/tree1.c
Normal file
83
list_and_trees/trees/tree1.c
Normal file
|
|
@ -0,0 +1,83 @@
|
|||
#include <stdio.h>
|
||||
#include <stdlib.h>
|
||||
|
||||
typedef int Data;
|
||||
|
||||
struct Node {
|
||||
Data val; // данные в узле
|
||||
struct Node * left; // левый ребенок
|
||||
struct Node * right; // правый ребенок
|
||||
};
|
||||
|
||||
struct Node * tree_add (struct Node * tree, Data x) {
|
||||
if (tree == NULL) {
|
||||
struct Node * data = malloc(sizeof(struct Node));
|
||||
data->left = NULL; data->right = NULL;
|
||||
data->val = x;
|
||||
//printf("Init tree - %d[%p]\n", data->val, data);
|
||||
return data;
|
||||
}
|
||||
|
||||
if (x < tree->val) {
|
||||
if (tree->left == NULL) {
|
||||
struct Node * data = malloc(sizeof(struct Node));
|
||||
data->left = NULL; data->right = NULL;
|
||||
data->val = x;
|
||||
tree->left = data;
|
||||
//printf("Added - %d [%p] to node %d[%p] left[%p], right[%p]\n", x, data, tree->val, tree, tree->left, tree->right );
|
||||
}
|
||||
else {
|
||||
tree_add(tree->left, x);
|
||||
}
|
||||
}
|
||||
if (x > tree->val) {
|
||||
if (tree->right == NULL) {
|
||||
struct Node * data = malloc(sizeof(struct Node));
|
||||
data->left = NULL; data->right = NULL;
|
||||
data->val = x;
|
||||
tree->right = data;
|
||||
//printf("Added - %d [%p] to node %d[%p] left[%p], right[%p]\n", x, data, tree->val ,tree, tree->left, tree->right );
|
||||
}
|
||||
else {
|
||||
tree_add(tree->right, x);
|
||||
}
|
||||
}
|
||||
return tree;
|
||||
|
||||
}
|
||||
|
||||
void tree_print (struct Node * tree) {
|
||||
if (tree != NULL) {
|
||||
tree_print(tree->left);
|
||||
printf("%d ", tree->val);
|
||||
tree_print(tree->right);
|
||||
}
|
||||
}
|
||||
|
||||
void tree_destroy (struct Node * tree) {
|
||||
if (tree->left != NULL) {
|
||||
tree_destroy(tree->left);
|
||||
}
|
||||
if(tree->right != NULL) {
|
||||
tree_destroy(tree->right);
|
||||
}
|
||||
free(tree);
|
||||
}
|
||||
|
||||
/*int main() {
|
||||
struct Node * tree = NULL;
|
||||
tree = tree_add(tree, 7);
|
||||
//printf("Tree - [%p]\n", tree);
|
||||
tree = tree_add(tree, 3);
|
||||
//printf("Tree - [%p]\n", tree);
|
||||
tree = tree_add(tree, 2);
|
||||
tree = tree_add(tree, 1);
|
||||
tree = tree_add(tree, 9);
|
||||
tree = tree_add(tree, 5);
|
||||
tree = tree_add(tree, 4);
|
||||
tree = tree_add(tree, 6);
|
||||
tree = tree_add(tree, 8);
|
||||
//printf("Tree - [%p]\n", tree);
|
||||
tree_print(tree);
|
||||
tree_destroy(tree);
|
||||
} */
|
||||
13
list_and_trees/trees/tree2.c
Normal file
13
list_and_trees/trees/tree2.c
Normal file
|
|
@ -0,0 +1,13 @@
|
|||
#include "tree1.c"
|
||||
|
||||
int main() {
|
||||
int i;
|
||||
struct Node * tree = NULL;
|
||||
scanf("%d", &i);
|
||||
while (i) {
|
||||
tree = tree_add(tree, i);
|
||||
scanf("%d", &i);
|
||||
}
|
||||
tree_print(tree);
|
||||
tree_destroy(tree);
|
||||
}
|
||||
95
list_and_trees/trees/tree2_full.c
Normal file
95
list_and_trees/trees/tree2_full.c
Normal file
|
|
@ -0,0 +1,95 @@
|
|||
#include <stdio.h>
|
||||
#include <stdlib.h>
|
||||
|
||||
typedef int Data;
|
||||
|
||||
struct Node {
|
||||
Data val; // данные в узле
|
||||
struct Node * left; // левый ребенок
|
||||
struct Node * right; // правый ребенок
|
||||
};
|
||||
|
||||
struct Node * tree_add (struct Node * tree, Data x) {
|
||||
if (tree == NULL) {
|
||||
struct Node * data = malloc(sizeof(struct Node));
|
||||
data->left = NULL; data->right = NULL;
|
||||
data->val = x;
|
||||
//printf("Init tree - %d[%p]\n", data->val, data);
|
||||
return data;
|
||||
}
|
||||
|
||||
if (x < tree->val) {
|
||||
if (tree->left == NULL) {
|
||||
struct Node * data = malloc(sizeof(struct Node));
|
||||
data->left = NULL; data->right = NULL;
|
||||
data->val = x;
|
||||
tree->left = data;
|
||||
//printf("Added - %d [%p] to node %d[%p] left[%p], right[%p]\n", x, data, tree->val, tree, tree->left, tree->right );
|
||||
}
|
||||
else {
|
||||
tree_add(tree->left, x);
|
||||
}
|
||||
}
|
||||
if (x > tree->val) {
|
||||
if (tree->right == NULL) {
|
||||
struct Node * data = malloc(sizeof(struct Node));
|
||||
data->left = NULL; data->right = NULL;
|
||||
data->val = x;
|
||||
tree->right = data;
|
||||
//printf("Added - %d [%p] to node %d[%p] left[%p], right[%p]\n", x, data, tree->val ,tree, tree->left, tree->right );
|
||||
}
|
||||
else {
|
||||
tree_add(tree->right, x);
|
||||
}
|
||||
}
|
||||
return tree;
|
||||
|
||||
}
|
||||
|
||||
void tree_print (struct Node * tree) {
|
||||
if (tree != NULL) {
|
||||
tree_print(tree->left);
|
||||
printf("%d ", tree->val);
|
||||
tree_print(tree->right);
|
||||
}
|
||||
}
|
||||
|
||||
void tree_destroy (struct Node * tree) {
|
||||
if (tree->left != NULL) {
|
||||
tree_destroy(tree->left);
|
||||
}
|
||||
if(tree->right != NULL) {
|
||||
tree_destroy(tree->right);
|
||||
}
|
||||
free(tree);
|
||||
}
|
||||
|
||||
/*int main() {
|
||||
struct Node * tree = NULL;
|
||||
tree = tree_add(tree, 7);
|
||||
//printf("Tree - [%p]\n", tree);
|
||||
tree = tree_add(tree, 3);
|
||||
//printf("Tree - [%p]\n", tree);
|
||||
tree = tree_add(tree, 2);
|
||||
tree = tree_add(tree, 1);
|
||||
tree = tree_add(tree, 9);
|
||||
tree = tree_add(tree, 5);
|
||||
tree = tree_add(tree, 4);
|
||||
tree = tree_add(tree, 6);
|
||||
tree = tree_add(tree, 8);
|
||||
//printf("Tree - [%p]\n", tree);
|
||||
tree_print(tree);
|
||||
tree_destroy(tree);
|
||||
} */
|
||||
|
||||
int main() {
|
||||
int i;
|
||||
struct Node * tree = NULL;
|
||||
scanf("%d", &i);
|
||||
while (i) {
|
||||
tree = tree_add(tree, i);
|
||||
scanf("%d", &i);
|
||||
}
|
||||
tree_print(tree);
|
||||
tree_destroy(tree);
|
||||
}
|
||||
94
list_and_trees/trees/tree4_full.c
Normal file
94
list_and_trees/trees/tree4_full.c
Normal file
|
|
@ -0,0 +1,94 @@
|
|||
#include <stdio.h>
|
||||
#include <stdlib.h>
|
||||
|
||||
typedef int Data;
|
||||
|
||||
struct Node {
|
||||
Data val; // данные в узле
|
||||
struct Node * left; // левый ребенок
|
||||
struct Node * right; // правый ребенок
|
||||
};
|
||||
|
||||
struct Node * tree_add (struct Node * tree, Data x) {
|
||||
if (tree == NULL) {
|
||||
struct Node * data = malloc(sizeof(struct Node));
|
||||
data->left = NULL; data->right = NULL;
|
||||
data->val = x;
|
||||
//printf("Init tree - %d[%p]\n", data->val, data);
|
||||
return data;
|
||||
}
|
||||
|
||||
if (x < tree->val) {
|
||||
if (tree->left == NULL) {
|
||||
struct Node * data = malloc(sizeof(struct Node));
|
||||
data->left = NULL; data->right = NULL;
|
||||
data->val = x;
|
||||
tree->left = data;
|
||||
//printf("Added - %d [%p] to node %d[%p] left[%p], right[%p]\n", x, data, tree->val, tree, tree->left, tree->right );
|
||||
}
|
||||
else {
|
||||
tree_add(tree->left, x);
|
||||
}
|
||||
}
|
||||
if (x > tree->val) {
|
||||
if (tree->right == NULL) {
|
||||
struct Node * data = malloc(sizeof(struct Node));
|
||||
data->left = NULL; data->right = NULL;
|
||||
data->val = x;
|
||||
tree->right = data;
|
||||
//printf("Added - %d [%p] to node %d[%p] left[%p], right[%p]\n", x, data, tree->val ,tree, tree->left, tree->right );
|
||||
}
|
||||
else {
|
||||
tree_add(tree->right, x);
|
||||
}
|
||||
}
|
||||
return tree;
|
||||
|
||||
}
|
||||
|
||||
void tree_print (struct Node * tree) {
|
||||
if (tree != NULL) {
|
||||
tree_print(tree->left);
|
||||
printf("%d ", tree->val);
|
||||
tree_print(tree->right);
|
||||
}
|
||||
}
|
||||
|
||||
void tree_add_leafs (struct Node * tree, struct Node * * res) {
|
||||
if (tree != NULL) {
|
||||
tree_add_leafs(tree->left, res);
|
||||
if (tree->left == NULL && tree->right == NULL) {
|
||||
*res = tree_add(*res, tree->val);
|
||||
}
|
||||
tree_add_leafs(tree->right, res);
|
||||
}
|
||||
}
|
||||
|
||||
void tree_destroy (struct Node * tree) {
|
||||
if (tree != NULL) {
|
||||
if (tree->left != NULL) {
|
||||
tree_destroy(tree->left);
|
||||
}
|
||||
if(tree->right != NULL) {
|
||||
tree_destroy(tree->right);
|
||||
}
|
||||
free(tree);
|
||||
}
|
||||
}
|
||||
|
||||
int main() {
|
||||
int i;
|
||||
struct Node * tree = NULL;
|
||||
struct Node * res = NULL;
|
||||
scanf("%d", &i);
|
||||
while (i) {
|
||||
tree = tree_add(tree, i);
|
||||
scanf("%d", &i);
|
||||
}
|
||||
|
||||
tree_add_leafs(tree, &res);
|
||||
|
||||
tree_print(res);
|
||||
tree_destroy(tree);
|
||||
tree_destroy(res);
|
||||
}
|
||||
Reference in a new issue