编写方法如下:
高度其实也叫深度,我通俗点说就是 比如根节点 是第一层,根节点的左右孩子为第二层,然后根节点的左右孩子各自的孩子为第三层.....那么二叉树的高度就是这棵树最大的层数。这么说不知道楼主明白了没有,举例就是:如果只有一个根节点,那么高度就是1,如果有一个根节点再加上根节点的两个绝逗销孩子,或者其中一个孩子,那么高度就是2;
那根据这样 如果用递归的思想,算法就比较好写了,就是统计一下根节点的左右孩子的高对呗,看哪个的高度更大那二叉树高度就是哪个。
具体代码如下:
#include
#include
typedef struct Node{
char data;
struct Node* lchild;
struct Node* rchild;
}Node,*Tree; //二叉树的定义也不用多说吧那个data的数据类型char可以任意换是吧
int max(int m, int n)
{
if (m > n)
return m;
else
return n;
} //这个我想能够看明白 求两个数最大值,为什么要求最大值上面也说了
int TreeHeight(Node *root)
{
if (root == NULL)
return 0; //如果根节点都没有 那高度肯定就是0了 是吧
else
return 1 + max(TreeHeight(root->lchild), TreeHeight(root->rchild));
} //否则递归计算他的左右孩子的高度然后在加上根节点的层数1 对吧
int height(Node *t) //第二个算法(其实和第一个一样)
{
if(t==NULL)
return 0; 指链
else
{
int m=height(t->lchild);
int n=height(t->rchild); //递归计算该节点的左右孩子的高度
return(m>n)?m+1:n+1; //只不过这里没有用并游到上面求最大值的那个函数,楼主应该学过C
} //吧,这就是个逗号表达式,判断?A:B 判断满足就返回A不满
} //足就返回B 那这句换还是一样就是求m和n的最大值然后加1返 回