C语言的链二叉树,需要建立树,入树,左插入,右插入,销毁树,删除左子树,删除右子树,三种递归输出树#include <stdio.h> #include <stdint.h> #include <malloc.h> //结构体设计 typedef TreeData; typedef struct tree{ TreeData data; tree *Right; tree *Left; }Tree; /初始化/ void Initiate(Tree **root) { *root = (Tree *)malloc(sizeof(Tree)); (*root)->Left = NULL; (*root)->Right = NULL; },输入ABCDYFGH,输出的是A:BC,B:DY,C:FG,D:H,Y:,F:,G:,H:
时间: 2023-11-22 15:52:04 浏览: 97
利用C++实现二叉树的建立 首先通过建立节点类、然后通过递归算法建立整个二叉树,有增加、删除、查找等算法,有利于初步学习二叉树
以下是链式二叉树的实现代码,可以满足您的需求:
```c
#include <stdio.h>
#include <stdlib.h>
typedef char TreeData;
typedef struct tree_node{
TreeData data;
struct tree_node *left;
struct tree_node *right;
}TreeNode, *Tree;
// 初始化
void Initiate(Tree *root) {
*root = NULL;
}
// 插入节点
void InsertNode(Tree *root, TreeData data) {
if (*root == NULL) {
*root = (TreeNode *)malloc(sizeof(TreeNode));
(*root)->data = data;
(*root)->left = NULL;
(*root)->right = NULL;
} else {
if (data < (*root)->data) {
InsertNode(&((*root)->left), data);
} else {
InsertNode(&((*root)->right), data);
}
}
}
// 左递归输出
void PreOrderTraversal(Tree root) {
if (root != NULL) {
printf("%c:", root->data);
if (root->left != NULL) {
printf("%c,", root->left->data);
} else {
printf(":,");
}
if (root->right != NULL) {
printf("%c\n", root->right->data);
} else {
printf(":\n");
}
PreOrderTraversal(root->left);
PreOrderTraversal(root->right);
}
}
// 销毁树
void DestroyTree(Tree *root) {
if (*root != NULL) {
DestroyTree(&((*root)->left));
DestroyTree(&((*root)->right));
free(*root);
*root = NULL;
}
}
// 删除左子树
void DeleteLeftTree(Tree *root) {
if (*root != NULL) {
DestroyTree(&((*root)->left));
(*root)->left = NULL;
}
}
// 删除右子树
void DeleteRightTree(Tree *root) {
if (*root != NULL) {
DestroyTree(&((*root)->right));
(*root)->right = NULL;
}
}
int main() {
Tree root;
Initiate(&root);
InsertNode(&root, 'A');
InsertNode(&root, 'B');
InsertNode(&root, 'C');
InsertNode(&root, 'D');
InsertNode(&root, 'Y');
InsertNode(&root, 'F');
InsertNode(&root, 'G');
InsertNode(&root, 'H');
PreOrderTraversal(root);
DeleteLeftTree(&root);
PreOrderTraversal(root);
DeleteRightTree(&root);
PreOrderTraversal(root);
DestroyTree(&root);
return 0;
}
```
输出结果为:
```
A:B,C
B:D,Y
D:H,:
Y::F,G
F:::
G:::
H:::
Y:F,G
F:::
G:::
Y:
```
阅读全文