C语言创建二叉树

//C语言实现创建二叉树 


#include<stdio.h>
#include<stdlib.h>
typedef int DataType;

typedef struct Node{
	DataType Data;
	struct Node *lchild, *rchild;
}BinTNode, *BiTree;

void Create_BinTree(BiTree *T)
{
	char ch;
	
	scanf("%c",&ch);
	if(ch=='#')
	{
		*T==NULL;
	//	return; 
	} 
	else
	{
		*T=(BinTNode*)malloc(sizeof(BinTNode)); 
		(*T)->Data=ch;
		printf("\n建立左子树\n");
		(*T)->lchild=NULL; 
		(*T)->rchild=NULL;
		Create_BinTree(  &((*T)->lchild ) );//建立左子树 
		printf("\n建立右子树\n");
		Create_BinTree(  &((*T)->rchild ) );//建立右子树 
	}
	return ;
}

void DestroyBitTree(BiTree *T)//销毁二叉树 
{
	if(*T)
	{
		if((*T)->lchild)
			DestroyBitTree(  &((*T)->lchild ) );
		if((*T)->rchild)
			DestroyBitTree(  &((*T)->rchild)  );
	
	free(*T);
	*T=NULL; 
	}
	
	printf("\n销毁成功!\n");
	return;
}


//遍历二叉树
void PreOrder_Traverase(BiTree T)//先序遍历 
{
	if(T==NULL)
	return;
	else
	{
		printf(" %c " , T->Data);
		PreOrder_Traverase(T->lchild);
		PreOrder_Traverase(T->rchild);
	}
	
} 
 
void InOrder_Traverase(BiTree T)//中序遍历 
{
	if(T==NULL)
	return;
	else
	{
		PreOrder_Traverase(T->lchild);
		printf(" %c " , T->Data);
		PreOrder_Traverase(T->rchild);	
	} 
	
}
 
void PostOrder_Traverase(BiTree T)//后序遍历 
{
	if(T==NULL)
	return ;
	else
	{
		PreOrder_Traverase(T->lchild);
		PreOrder_Traverase(T->rchild);	
		printf(" %c " , T->Data);
	}
} 


int main()
{
	BiTree Tree;
	Create_BinTree(&Tree);
	
	printf("\n先序遍历\n"); 
	PreOrder_Traverase(Tree);
	printf("\n中序遍历\n");
	InOrder_Traverase(Tree);
	printf("\n后序遍历\n");
	PostOrder_Traverase(Tree);
	
	
	DestroyBitTree(&Tree);
	
	 
	return 0;
}

 

测试:

 

 

 

 

 

 

 

 

 

 

 

### 如何使用C语言构建和初始化二叉树 在C语言中,可以通过定义结构体来表示二叉树的节点,并利用动态内存分配完成二叉树创建与初始化。以下是详细的说明以及示例代码。 #### 结构体定义 为了实现二叉树,可以先定义一个`TreeNode`结构体,该结构体包含三个部分:数据域、指向左子节点的指针和指向右子节点的指针[^1]。 ```c #include <stdio.h> #include <stdlib.h> // 定义二叉树节点结构体 typedef struct TreeNode { int data; // 数据域(这里假设为整数) struct TreeNode* left; // 左子节点指针 struct TreeNode* right; // 右子节点指针 } TreeNode; ``` #### 创建新节点 通过编写一个函数`createNode`,可以在运行时动态地创建一个新的二叉树节点并为其赋值。此函数会调用`malloc`函数分配内存空间。 ```c // 动态创建新的二叉树节点 TreeNode* createNode(int value) { TreeNode* newNode = (TreeNode*)malloc(sizeof(TreeNode)); if (!newNode) { printf("Memory allocation failed!\n"); exit(1); } newNode->data = value; // 设置节点的数据 newNode->left = NULL; // 初始化左子节点为空 newNode->right = NULL; // 初始化右子节点为空 return newNode; // 返回新建的节点地址 } ``` #### 构建简单的二叉树 下面是一个例子,展示如何使用上述方法逐步建立一棵小型的二叉树: ```c int main() { // 创建根节点 TreeNode* root = createNode(1); // 创建左右子节点 root->left = createNode(2); // 添加左子节点 root->right = createNode(3); // 添加右子节点 // 继续扩展树形结构 root->left->left = createNode(4); root->left->right = createNode(5); // 打印验证 printf("Binary tree created successfully.\n"); return 0; } ``` 以上程序片段展示了基本操作流程——从根节点开始逐层添加其对应的左右子节点直到形成完整的二叉树形状。 #### 平衡调整功能简介 如果涉及到更复杂的场景比如AVL树,则还需要额外考虑旋转等平衡维护机制。例如,在处理右右型不平衡情况下的修复逻辑可通过特定算法实现[^2]: ```c struct Tree* right_right(struct Tree* root){ ... } ``` 需要注意的是实际应用中的具体细节可能会有所不同,因此建议根据实际情况灵活修改相关参数设置以满足项目需求。 ---
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值