From f7a523b8ca2c3afaa6abca084c1965a2236a8bfb Mon Sep 17 00:00:00 2001 From: jdh <24016020834@stu.nsu.edu.cn> Date: Tue, 29 Apr 2025 18:01:09 +0800 Subject: [PATCH] up Co-Authored-By: Jdhggg <111557398+Jdhggg@users.noreply.github.com> --- .gitignore | 1 + binary_tree.c | 59 +++++++++++++++ binary_tree.h | 18 +++++ linked_list_stack.c | 10 +-- linked_queue.h | 2 +- main.c | 176 +++++++++++++++++++++++--------------------- 6 files changed, 175 insertions(+), 91 deletions(-) create mode 100644 binary_tree.c create mode 100644 binary_tree.h diff --git a/.gitignore b/.gitignore index a2870dd..9246a07 100644 --- a/.gitignore +++ b/.gitignore @@ -64,3 +64,4 @@ Project2.vcxproj.filters *.vcxproj Project2.vcxproj Project2.vcxproj.filters +main.c diff --git a/binary_tree.c b/binary_tree.c new file mode 100644 index 0000000..825c22f --- /dev/null +++ b/binary_tree.c @@ -0,0 +1,59 @@ +#include +#include +#include +#include "binary_tree.h" + +tree_node *init_binary_tree(elem_type value) +{ + tree_node *node = (tree_node *)malloc(sizeof(tree_node)); + if (node == NULL) + { + printf("error: malloc failed from:init_binary_tree\n"); + } + node->value = value; + node->left = NULL; + node->right = NULL; + return node; +} + +// 插入节点 +void insert_tree_node(tree_node *node,tree_node *node_new) +{ + if (node == NULL) + { + node ->left = node_new; + return; + } + tree_node *temp = node; + node ->left = node_new; + +} +// 删除节点 + +// 遍历树节点 bfs +void traverse_tree(tree_node *roots) +{ + tree_node *queue[3] = {NULL,NULL,NULL}; + int front = 0; + int rear = 0; + if (roots == NULL) + { + printf("error: roots is NULL\n"); + return; + } + while(roots) + { + tree_node *temp[2] = {roots->left,roots->right}; + for (int i = 0;i<2;i++) + { + if (temp[i] != NULL) + { + queue[rear] = temp[i]; + rear = (rear + 1) % 3; + printf("%d ",temp[i]->value); + } + } + roots = queue[front]; + front = (front+1) % 3; + } +} diff --git a/binary_tree.h b/binary_tree.h new file mode 100644 index 0000000..62eb1f3 --- /dev/null +++ b/binary_tree.h @@ -0,0 +1,18 @@ +#ifndef BINARY_TREE +#define BINARY_TREE +#define elem_type int +typedef struct tree_node +{ + elem_type value; + struct tree_node *left; + struct tree_node *right; +}tree_node; +// 初始化树节点 +tree_node *init_binary_tree(elem_type value); +// 插入节点 +void insert_tree_node(tree_node *node,tree_node *node_new); +// 删除节点 +void delete_node(tree_node *node); +// 遍历树节点 +void traverse_tree(tree_node *roots); +#endif // DEBUG diff --git a/linked_list_stack.c b/linked_list_stack.c index 02c5470..8960718 100644 --- a/linked_list_stack.c +++ b/linked_list_stack.c @@ -2,13 +2,13 @@ #include #include "linked_list_stack.h" -// ʼջ +// ��ʼջ stack_linked* init_stack_linked(void) { stack_linked* s = (stack_linked*)malloc(sizeof(stack_linked)); if (s == NULL) { - printf("ڴʧܣ\n"); + printf("�ڴ����ʧ�ܣ�\n"); return NULL; } s->top = NULL; @@ -16,13 +16,13 @@ stack_linked* init_stack_linked(void) return s; } -// ջ +// ��ջ void push_stack_linked(stack_linked* s, elem_type value) { stack_node* node = (stack_node*)malloc(sizeof(stack_node)); if (node == NULL) { - printf("ڴʧܣ\n"); + printf("�ڴ����ʧ�ܣ�\n"); return NULL; } node->value = value; @@ -31,7 +31,7 @@ void push_stack_linked(stack_linked* s, elem_type value) s->size++; } -// ջ +// ��ջ int pop_stack_linked(stack_linked* s) { int flog = 0; diff --git a/linked_queue.h b/linked_queue.h index b80aa41..43d0dae 100644 --- a/linked_queue.h +++ b/linked_queue.h @@ -31,4 +31,4 @@ int empty_link_queue(link_queue* q); int print_link_queue(link_queue* q); -#endif \ No newline at end of file +#endif diff --git a/main.c b/main.c index f7647ee..71eea0d 100644 --- a/main.c +++ b/main.c @@ -1,90 +1,84 @@ #include #include #include +#include "binary_tree.h" +int main(void) { -int main(void) -{ + // sq_list* L = init_sq_list(); + // sq_list* N = init_sq_list(); + // for (int i = 1; i <= 3; i++) + //{ + // N->data[i - 1] = i+10; + // } + // for (int i = 1; i <= 10; i++) + //{ + // L->data[i - 1] = i; + // } + // N->length = 3; + // L->length = 10; + // print_sq_list(N); + // print_sq_list(L); + // mer_ge_sq_list(L,N); + // print_sq_list(L); + // printf("L->length:[%d]\n", L->length); + /*sq_list* L = init_sq_list(); + sq_list* N = init_sq_list(); + for (int i = 1; i <= 3; i++) + { + N->data[i - 1] = i+10; + } + for (int i = 1; i <= 10; i++) + { + L->data[i - 1] = i; + } + N->length = 3; + L->length = 10; + print_sq_list(N); + print_sq_list(L); + mer_ge_sq_list(L,N); + print_sq_list(L); + printf("L->length:[%d]\n", L->length);*/ - //sq_list* L = init_sq_list(); - //sq_list* N = init_sq_list(); - //for (int i = 1; i <= 3; i++) - //{ - // N->data[i - 1] = i+10; - //} - //for (int i = 1; i <= 10; i++) - //{ - // L->data[i - 1] = i; - //} - //N->length = 3; - //L->length = 10; - //print_sq_list(N); - //print_sq_list(L); - //mer_ge_sq_list(L,N); - //print_sq_list(L); - //printf("L->length:[%d]\n", L->length); - /*sq_list* L = init_sq_list(); - sq_list* N = init_sq_list(); - for (int i = 1; i <= 3; i++) - { - N->data[i - 1] = i+10; - } - for (int i = 1; i <= 10; i++) - { - L->data[i - 1] = i; - } - N->length = 3; - L->length = 10; - print_sq_list(N); - print_sq_list(L); - mer_ge_sq_list(L,N); - print_sq_list(L); - printf("L->length:[%d]\n", L->length);*/ + /* array_stack* stack = init_array_stack(); + push_array_stack(stack, 1); + push_array_stack(stack, 2); + push_array_stack(stack, 3);*/ - - /* array_stack* stack = init_array_stack(); - push_array_stack(stack, 1); - push_array_stack(stack, 2); - push_array_stack(stack, 3);*/ + /* array_queue *q = init_array_queue(); + push_array_queue(q,0); + push_array_queue(q,1); + push_array_queue(q,2); + print_array_queue(q); + printf("---------------------\n"); + pop_array_queue(q); + print_array_queue(q); + printf("----------\n"); + push_array_queue(q, 666); + print_array_queue(q);*/ + // node* q1 = init_node(1); + // node* q2 = init_node(2); + // node* q3 = init_node(3); + // node* q4 = init_node(4); + // q1->next = q2; + // q2->next = q3; + // q3->next = q4; + ////address_node *n = find_node(q1, 3); + //// printf("%d\n %p\n", n->n,n->p + ////int e = get_node_list(q1); + // node* q2_3 = init_node(0); + // insert_node(q2, q2_3); + // print_node_list(q1); + // delete_node(q2); + // print_node_list(q1); - - /* array_queue *q = init_array_queue(); - push_array_queue(q,0); - push_array_queue(q,1); - push_array_queue(q,2); - print_array_queue(q); - printf("---------------------\n"); - pop_array_queue(q); - print_array_queue(q); - printf("----------\n"); - push_array_queue(q, 666); - print_array_queue(q);*/ - - //node* q1 = init_node(1); - //node* q2 = init_node(2); - //node* q3 = init_node(3); - //node* q4 = init_node(4); - //q1->next = q2; - //q2->next = q3; - //q3->next = q4; - ////address_node *n = find_node(q1, 3); - //// printf("%d\n %p\n", n->n,n->p - ////int e = get_node_list(q1); - //node* q2_3 = init_node(0); - //insert_node(q2, q2_3); - //print_node_list(q1); - //delete_node(q2); - //print_node_list(q1); - - - /* stack_linked* head = init_stack_linked(); - push_stack_linked(head, 1); - push_stack_linked(head, 2); - push_stack_linked(head, 3); - print_linked(head); - pop_stack_linked(head); - print_linked(head);*/ - + /* stack_linked* head = init_stack_linked(); + push_stack_linked(head, 1); + push_stack_linked(head, 2); + push_stack_linked(head, 3); + print_linked(head); + pop_stack_linked(head); + print_linked(head);*/ // queue_test(); /*array_queue *q = init_array_queue(); @@ -106,10 +100,22 @@ int main(void) printf("____________________\n"); pop_link_queue(q); print_link_queue(q);*/ - - - - printf("Hello World!\n"); - system("pause"); - return 0; + + tree_node *root = init_binary_tree(1); + tree_node *node1 = init_binary_tree(2); + tree_node *node2 = init_binary_tree(3); + tree_node *node3 = init_binary_tree(4); + tree_node *node4 = init_binary_tree(5); + tree_node *node5 = init_binary_tree(6); + tree_node *node6 = init_binary_tree(7); + root->left = node1; + root->right = node2; + node1->left = node3; + node1->right = node4; + node2->left = node5; + node2->right = node6; + traverse_tree(root); + printf("Hello World!\n"); + system("pause"); + return 0; }