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);
}
}