创建二叉树,以及求解二叉树的高度和叶子节点数
#include<stdio.h>
#include<stdlib.h>
typedef struct BINARRYNODE
{
char ch;
BINARRYNODE* LChild;
BINARRYNODE* RChild;
}BinarryNode;
//递归遍历
void Recursion(BinarryNode* root)
{
if (root == NULL)
{
return;
}
//先序遍历
//先访问根节点
printf("%c", root->ch);
//再遍历左子树
Recursion(root->LChild);
//再遍历右子树
Recursion(root->RChild);
/* //中序遍历
//再遍历左子树
Recursion(root->LChild);
//先访问根节点
printf("%c", root->ch);
//再遍历右子树
Recursion(root->RChild);
*/
/*//后序遍历
//再遍历左子树
Recursion(root->LChild);
//再遍历右子树
Recursion(root->RChild);
//先访问根节点
printf("%c", root->ch);
*/
}
static int m_num = 0;
//求叶子结点数目
void CaclateLeafNum(BinarryNode* root)
{
if (root == NULL)
{
return;
}
if (root->LChild == NULL && root->RChild == NULL)
{
m_num++;
}
CaclateLeafNum(root->LChild);
CaclateLeafNum(root->RChild);
}
//求树的高度
int BinarrayNodeTreeNum(BinarryNode*root)
{
int n1, n2;
if (root == NULL)
{
return -1;
}
n1 = BinarrayNodeTreeNum(root->LChild);
n2 = BinarrayNodeTreeNum(root->RChild);
return (n1 > n2) ? n1 + 1 : n2 + 1;
}
//创建二叉树
void Create_BinarrayNode()
{
//创建结点
BinarryNode node1 = { 'A',NULL,NULL };
BinarryNode node2 = { 'B',NULL,NULL };
BinarryNode node3 = { 'C',NULL,NULL };
BinarryNode node4 = { 'D',NULL,NULL };
BinarryNode node5 = { 'E',NULL,NULL };
BinarryNode node6 = { 'F',NULL,NULL };
BinarryNode node7 = { 'G',NULL,NULL };
BinarryNode node8 = { 'H',NULL,NULL };
//建立结点关系
node1.LChild = &node2;
node1.RChild = &node6;
node2.RChild = &node3;
node3.LChild = &node4;
node3.RChild = &node5;
node6.RChild = &node7;
node7.LChild = &node8;
Recursion(&node1);
printf("\n");
//树的高度
int ret=BinarrayNodeTreeNum(&node1);
printf("%d\n", ret);
CaclateLeafNum(&node1);
printf("叶子节点数目是:%d\n",m_num);
}
int main()
{
Create_BinarrayNode();
system("pause");
return 0;
}