二叉树 c实现

#include<stdio.h>
typedef struct Bi{
char data;
struct Bi *left,*righ;
}BN,*Br;

void creat(Br *T)//创建二叉树{
char c;
scanf("%c",&c);
if(c==' ') *T=NULL;
else {
(*T)->data=c;
*T=(Br)calloc(sizeof(BN));
creat(&((*T)->left));
creat(&((*T)->righ));
}
}

visit(char c,int L){ //二叉树的遍例
if(c=='F') printf("%c在第%d层/n",c,L);
printf("%c %d/n",c,L);
}

pre(Br T,int L){
if(T){
visit(T->data,L);
pre(T->left,L+1);
pre(T->righ,L+1);
}
}


main(){
int l=1;
Br T=NULL;
creat(&T);
pre(T,l);
getche();
}

### 二叉树的C语言代码实现 二叉树是一种基础的数据结构,其每个节点最多有两个子节点,通常称为左子节点和右子节点。在C语言中,可以通过结构体来定义二叉树的节点,并使用指针进行操作。 以下是一个完整的二叉树实现示例,包含节点定义、插入操作、三种遍历方式(前序、中序、后序)以及内存释放功能: ```c #include <stdio.h> #include <stdlib.h> // 定义二叉树节点结构 typedef struct TreeNode { int data; struct TreeNode *left; struct TreeNode *right; } TreeNode; // 创建新节点 TreeNode* createNode(int value) { TreeNode* newNode = (TreeNode*)malloc(sizeof(TreeNode)); if (!newNode) { printf("Memory allocation failed!\n"); return NULL; } newNode->data = value; newNode->left = NULL; newNode->right = NULL; return newNode; } // 前序遍历 void preorderTraversal(TreeNode* root) { if (root != NULL) { printf("%d ", root->data); // 访问根节点 preorderTraversal(root->left); // 遍历左子树 preorderTraversal(root->right); // 遍历右子树 } } // 中序遍历 void inorderTraversal(TreeNode* root) { if (root != NULL) { inorderTraversal(root->left); // 遍历左子树 printf("%d ", root->data); // 访问根节点 inorderTraversal(root->right); // 遍历右子树 } } // 后序遍历 void postorderTraversal(TreeNode* root) { if (root != NULL) { postorderTraversal(root->left); // 遍历左子树 postorderTraversal(root->right); // 遍历右子树 printf("%d ", root->data); // 访问根节点 } } // 插入节点 TreeNode* insertNode(TreeNode* root, int value) { if (root == NULL) { return createNode(value); } // 假设值小于当前节点则插入左子树 if (value < root->data) { root->left = insertNode(root->left, value); } // 值大于等于当前节点则插入右子树 else { root->right = insertNode(root->right, value); } return root; } // 释放二叉树占用的内存 void freeTree(TreeNode* root) { if (root != NULL) { freeTree(root->left); // 递归释放左子树 freeTree(root->right); // 递归释放右子树 free(root); // 释放当前节点 } } // 构建一个简单的二叉树用于测试 TreeNode* buildTree() { TreeNode* root = NULL; int values[] = {5, 3, 7, 2, 4}; // 测试数据 int size = sizeof(values) / sizeof(values[0]); for (int i = 0; i < size; i++) { root = insertNode(root, values[i]); } return root; } int main() { // 构建二叉树 TreeNode* root = buildTree(); // 前序遍历 printf("Pre-order traversal of the tree:\n"); preorderTraversal(root); printf("\n"); // 中序遍历 printf("In-order traversal of the tree:\n"); inorderTraversal(root); printf("\n"); // 后序遍历 printf("Post-order traversal of the tree:\n"); postorderTraversal(root); printf("\n"); // 清理分配的内存 freeTree(root); return 0; } ``` #### 程序说明: 1. **createNode**: 创建一个新的二叉树节点并初始化其左右子节点为`NULL`。 2. **insertNode**: 根据给定的数值将新节点插入到合适的位置,构建一棵基本的二叉搜索树。 3. **preorderTraversal, inorderTraversal, postorderTraversal**: 分别实现前序、中序、后序遍历,按照不同的顺序访问所有节点。 4. **freeTree**: 递归释放所有节点所占用的内存空间以避免内存泄漏。 5. **buildTree**: 构建一个简单的二叉树用于测试,返回根节点。 此代码适用于初学者理解二叉树的基本操作[^1],如需扩展功能(例如删除节点、平衡调整等),可进一步参考相关算法实现[^3]。 ---
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值