C_DS_AIgo/binary_tree.c
jdh d2c422c68b up binary.c
实现了二叉树的dfs遍历

Co-Authored-By: Jdhggg <111557398+Jdhggg@users.noreply.github.com>
2025-04-30 14:24:13 +08:00

70 lines
1.5 KiB
C

#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#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;
}
printf("%d\n", roots->value);
while(roots ->left != NULL && roots -> right != NULL)
{
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);
}
}
printf("\n");
roots = queue[front];
front = (front+1) % 3;
}
}
// dfs遍历
void traverse_tree_dfs(tree_node *roots)
{
if (roots == NULL)
return;
printf("%d\n",roots->value);
traverse_tree_dfs(roots->left);
traverse_tree_dfs(roots->right);
}