二叉树基本操作代码(C语言)

这篇博客详细介绍了如何使用C语言实现二叉树的各种基本操作,包括构造二叉树结点、销毁二叉树、查找节点、遍历二叉树(前序、中序、后序和层序)以及判断是否为完全二叉树和计算二叉树高度等。通过示例代码和效果展示,帮助读者理解和掌握相关知识。
摘要由CSDN通过智能技术生成

前言

C语言实现二叉树,在某些基本操作中需要借助队列结构实现,C++可以不借助其他结构。

构造二叉树结点

BTNode* BinaryTreeCreate (BTDataType* str, int* pi)
{
   
	if (str[*pi] == '#')
	{
   
		(*pi)++;
		return NULL;
	}
	BTNode* root = (BTNode*)malloc(sizeof(BTNode));

	if (root == NULL)
	{
   
		perror("malloc fail");
		exit(-1);
	}
	root->data = str[(*pi)++];

	root->left = BinaryTreeCreate(str, pi);

	root->right = BinaryTreeCreate(str, pi);

	return root;

}

二叉树销毁

void BinaryTreeDestory(BTNode** root)
{
   
	if (root == NULL)
	{
   
		return;
	}
	BinaryTreeDestory(&((*root)->left));
	BinaryTreeDestory(&((*root)->right));
	free(*root);
	*root = NULL;
}

二叉树节点个数

int BinaryTreeSize(BTNode* root)
{
   
	return root == NULL ? 0 : BinaryTreeSize(root->right) + BinaryTreeSize(root->left)+1;
}

二叉树叶子节点个数

int BinaryTreeLeafSize(BTNode* root)
{
   
	if (root == NULL)
	{
   
		return 0;
	}
	if (root->left == NULL && root->right == NULL)
	{
   
		return 1;
	}
	return BinaryTreeLeafSize(root->right) + BinaryTreeLeafSize(root->left);
}

二叉树第k层节点个数

int BinaryTreeLevelKSize(BTNode* root, int k)
{
   
	if (root == NULL)
	{
   
		return 0;
	}
	if (k == 1)
	{
   
		return 1;
	}
	return BinaryTreeLevelKSize(root->right,k-1) + BinaryTreeLevelKSize(root->left,k-1);
}

二叉树查找值为x的节点

BTNode* BinaryTreeFind(BTNode* root, BTDataType x)
{
   
	if (root == NULL)
	{
   
		return NULL;
	}
	if (root->data == x)
	{
   
		return root;
	}

	BTNode* left = BinaryTreeFind(root->left,x);
	if (left)
	{
   
		return left;
	}
	BTNode* right = BinaryTreeFind(root->right, x);
	
	if (right)
	{
   
		return right;
	}
	return NULL;
}

二叉树前序遍历

void BinaryTreePrevOrder(BTNode* obj)
{
   
	if (obj == NULL)
	{
   
		return;
	}
	printf("%c ", obj->data);
	BinaryTreePrevOrder(obj->left);
	
	BinaryTreePrevOrder(obj->right);
}

二叉树中序遍历

void inorder(BTNode* obj)
{
   
	if (obj == NULL)
	{
   
		return;
	}
	inorder(obj->left);
	printf("%c ", obj->data);
	inorder(obj->right);
}

二叉树后序遍历

void BinaryTreePostOrder(BTNode* obj
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值