二叉树的操作(C语言)

二叉树的基本操作

首先假设一个二叉树,如果有一个父结点只有一个子结点,就将另一个置空,如果是叶子结点就将其两个都制空,输入时用‘#’代替。

在这里插入图片描述
通过图片可以得知先序遍历为 :ABD#G###CE##F##

在这里插入图片描述

二叉树的创建

typedef struct node
{
	char data;
	struct node* lch, * rch;
}BTNode;

void create(BTNode*& Tree) //先序输入
{
	char a;
	scanf("%c", &a);
	if (a == '#')
		Tree = NULL;
	else
	{
		Tree = (BTNode*)malloc(sizeof(BTNode));
		Tree->data = a;
		create(Tree->lch);
		create(Tree->rch);
	}
}

二叉树的遍历

void BLtree(BTNode* tree) //先序输出,调转位置可以实现中序后序
{
	if (tree)
	{
		printf("%c",tree->data);
		BLtree(tree->lch);
		BLtree(tree->rch);
	}
}

查找结点数量

int countNode(BTNode* tree)//统计二叉树的结点个数
{
	if (tree == NULL)
		return 0;
	else
		return 1 + countNode(tree->lch) + countNode(tree->rch);//后序遍历 
}

查找叶子结点数量

int countleaf(BTNode* tree)//叶子结点个数
{
	if (tree == NULL)
		return 0;
	else if (tree->lch == NULL && tree->rch == NULL)
		return 1;
	return 	countleaf(tree->lch) + countleaf(tree->rch);
}

二叉树的深度

int countdeep(BTNode* tree)//二叉树的深度
{
	int left, right;
	if (tree == NULL)
		return 0;
	else
	{
		left = countdeep(tree->lch);
		right = countdeep(tree->rch);
		return left > right ? left + 1 : right + 1;
	}
}

运行结果为:

void Tree()
{
	BTNode* Tree = NULL;
	printf("先序输入二叉树:\n");//ABD#G###CE##F##
	createTree(Tree);

	//先序遍历
	BLtree(Tree);

	printf("结点的个数为 :%d\n", countNode(Tree));
	printf("叶子结点的个数为:%d\n", countleaf(Tree));
	printf("总层数为%d", countdeep(Tree));
}

在这里插入图片描述

  • 21
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值