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 #include <stdio.h> #include <stdlib.h> // 定义二叉树结构体 typedef struct binary_tree { int data; struct binary_tree *left; struct binary_tree *right; } Binary_Tree; // 创建新节点 Binary_Tree *create_node(int data) { Binary_Tree *new_node = (Binary_Tree*) malloc(sizeof(Binary_Tree)); new_node->data = data; new_node->left = NULL; new_node->right = NULL; return new_node; } // 插入节点 Binary_Tree *insert_node(Binary_Tree *root, int data) { if (root == NULL) { root = create_node(data); } else if (data < root->data) { root->left = insert_node(root->left, data); } else if (data > root->data) { root->right = insert_node(root->right, data); } return root; } // 先序遍历 void preorder_traversal(Binary_Tree *root) { if (root != NULL) { printf("%d ", root->data); preorder_traversal(root->left); preorder_traversal(root->right); } } // 中序遍历 void inorder_traversal(Binary_Tree *root) { if (root != NULL) { inorder_traversal(root->left); printf("%d ", root->data); inorder_traversal(root->right); } } // 后序遍历 void postorder_traversal(Binary_Tree *root) { if (root != NULL) { postorder_traversal(root->left); postorder_traversal(root->right); printf("%d ", root->data); } } int main() { Binary_Tree *root = NULL; root = insert_node(root, 4); insert_node(root, 2); insert_node(root, 1); insert_node(root, 3); insert_node(root, 6); insert_node(root, 5); insert_node(root, 7); printf("先序遍历: "); preorder_traversal(root); printf("\n"); printf("中序遍历: "); inorder_traversal(root); printf("\n"); printf("后序遍历: "); postorder_traversal(root); printf("\n"); return 0; } ``` 这段代码实现二叉树的基本操作,包括创建新节点、插入节点和三种不同方式的遍历操作。在 `main()` 函数中,我们创建了一个二叉树,并对其进行了遍历,输出了遍历结果。
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值