二叉树的实现(一)

1.二叉树需要实现的功能介绍

这次我们开始实现二叉树的一部分功能本次实现的功能有二叉树的建立、二叉树的节点个数、二叉树的叶子个数。

2.功能的实现

1、二叉树的定义

思维介绍:

                构建二叉树需要的是三个因素:1、节点的需要存储的数字2、左节点的地址3、右节点的地址。存储地址都是为了方便直接的找到左右节点。

代码介绍:

typedef char BTDataType;

typedef struct BinaryTreeNode
{
	BTDataType data;
	struct BinaryTreeNode* left;
	struct BinaryTreeNode* right;
}TreeNode;

2.二叉树的建立

思路解析:

               本代码是通过前序遍历的数组"ABD##E#H##CF##G##"构建二叉树。利用#的ascll就是空来判断前序数组里面的空节点把里面的空节点写成NULL,然后利用malloc函数来创建节点然后对节点进行判断,然后把数据存储到root的data里面最后利用递归构建其余的节点即可。

代码解析:

TreeNode* BinaryTreeCreate(BTDataType* a,  int* pi)
{
	if (a[*pi] == '#')
	{
		(*pi)++;
		return NULL;
	}
	TreeNode* root =(TreeNode*)malloc(sizeof(TreeNode));
	if (root == NULL)
	{
		perror("malloc fail");
		exit(-1);
	}
	root->data = a[(*pi)++];
	root->left = BinaryTreeCreate(a,pi);
	root->right = BinaryTreeCreate(a, pi);
	return root;
}

3.二叉树的节点的个数

思路解析:

                直接利用递归的方式加上计数的方法即可。

代码解析:

int BinaryTreeSize(TreeNode* root)
{
	if (root == NULL)
	{
		return 0;
	}
	
	return BinaryTreeSize(root->left)+BinaryTreeSize(root->right)+1;
}

4.二叉树的叶子个数

思路解析:

                直接判断两个子节点是否为空如果两个子节点是空我们就把那个节点判断是叶子结点,然后利用递归直接计数直接的返回即可。

代码解析:

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

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值