void main()
{
int i,a[15],t;
printf("输入要建树的节点数:\n ");
scanf("%d",&t);
printf("按层输入各节点:\n");
for(i=1;i<=t;i++)
scanf("%d",&a[i]);
if (t>=2&&t<=3)
printf("深度为 2");
else if (t>=4&&t<=7)
printf("深度为 3");
else if (t>=8&&t<=15)
printf("深度为 4");
}这个式子中的log(2)是指求以10为底2的对数,log(JIEDIAN)/log(2)算的是以2为底,JIEDIAN的对数,前面加(int)相当于下取整,把小数部分去掉,这个式求的是JIEDIAN个结点的数的最低高度
#include <stdioh>
#include <stdlibh>
#include <malloch>
typedef struct Node
{
char data;
Nodeleft_tree;
Noderight_tree;
}RootNode;
RootNodeCreateBinTree() //创建二叉树
{
char ch;
scanf("%c",&ch);
if (ch==',')
{
return NULL;
}
RootNodet=(Node)malloc(sizeof(Node));
t->data=ch;
t->left_tree=CreateBinTree();
t->right_tree=CreateBinTree();
return t;
}
void InTraBinTree(RootNodeT) //中序遍历二叉树
{
if (NULL!=T->left_tree)
{
InTraBinTree(T->left_tree);
}
printf("%c",T->data);
if (NULL!=T->right_tree)
{
InTraBinTree(T->right_tree);
}
}
void PoTraBinTree(RootNodeT) //后序遍历二叉树
{
if (NULL!=T->left_tree)
{
InTraBinTree(T->left_tree);
}
if (NULL!=T->right_tree)
{
InTraBinTree(T->right_tree);
}
printf("%c",T->data);
}
int GetLeavesCounts(RootNodeT) //获得叶子结点个数
{
int counts=0; //记录叶子结点个数
if (NULL==T->left_tree && NULL==T->right_tree)
{
return 1;
}
if (NULL!=T->left_tree)
{
counts+=GetLeavesCounts(T->left_tree);
}
if (NULL!=T->right_tree)
{
counts+=GetLeavesCounts(T->right_tree);
}
return counts;
}
int GetBinTreeDeep(RootNodeT) //获得二叉树深度
{
if (NULL==T->left_tree && NULL==T->right_tree)
{
return 1;
}
int left_deep=0,right_deep=0;
if (NULL!=T->left_tree)
{
left_deep=GetBinTreeDeep(T->left_tree); //获得左子树的深度
}
if (NULL!=T->right_tree)
{
right_deep=GetBinTreeDeep(T->right_tree); //获得右子树的深度
}
if (left_deep>right_deep)
{
return left_deep+1;
}
return right_deep+1;
}
void DestroyBinTree(RootNodeT) //销毁二叉树
{
if (NULL==T->left_tree && NULL==T->right_tree)
{
free(T);
return;
}
if (NULL!=T->left_tree)
{
DestroyBinTree(T->left_tree);
}
if (NULL!=T->right_tree)
{
DestroyBinTree(T->right_tree);
}
free(T);
}
void main()
{
system("color 0a");
printf("输入一个长度小于50个字符的字符串:");
RootNodeBinTree=CreateBinTree(); //创建二叉树
InTraBinTree(BinTree); //中序遍历
printf("\n");
PoTraBinTree(BinTree); //后序遍历
printf("\n");
printf("%d\n",GetLeavesCounts(BinTree)); //输出叶子结点个数
printf("%d\n",GetBinTreeDeep(BinTree)); //输出二叉树深度
DestroyBinTree(BinTree); //销毁二叉树
system("pause");
}
专门为你编的,若还有疑问请加QQ:2609135351
先遍历二叉树的左子树的深度,然后再遍历二叉树右子树的深度。最后判断左子树和右子树的深度,如果左子树比右子树深则返回左子树深度+1,否则返回右子树深度+1。
算法如下:
/ 初始条件: 二叉树T存在。 *** 作结果: 返回T的深度 /int BiTreeDepth(BiTree T)
{
int i,j;
if(!T)
return 0;
if(T->lchild)
i=BiTreeDepth(T->lchild); // 左子树深度
else
i=0;
if(T->rchild)
j=BiTreeDepth(T->rchild); // 右子树深度
else
j=0;
return i>ji+1:j+1;
}
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)