树的高度就是数的层数。那怎么计算树的高度呢?我们可以分贝将左节点的高度计算出来和右
节点的高度计算出来,在比较大小。大的就是树的高度。
其实不管是求树的高度还是叶子节点个数,都是在遍历整个树,只不过在遍历的过程中满足了某种条件就做出一定的处理,所以树的遍历是最基本的。
typedef struct BiTNode
{
int data;
struct BiTNode* lchild, *rchild;
}BiTNode;
int Deepth(BiTNode *root)
{
int deepthleft = 0;
int deepthright = 0;
int deepcount = 0;
if (root == NULL)
{
deepcount = 0;
return deepcount;
}
//求左子树的高度
deepthleft = Deepth(root->lchild);
//求右子树的高度
deepthright = Deepth(root->rchild);
//每次都要加上根节点的高度
deepcount = 1+ ((deepthleft > deepthright) ? deepthleft : deepthright);
return deepcount;
}
void main()
{
BiTNode t1, t2, t3, t4, t5;
memset(&t1, 0, sizeof(BiTNode));
memset(&t2, 0, sizeof(BiTNode));
memset(&t3, 0, sizeof(BiTNode));
memset(&t4, 0, sizeof(BiTNode));
memset(&t5, 0, sizeof(BiTNode));
t1.data = 1;
t2.data = 2;
t3.data = 3;
t4.data = 4;
t5.data = 5;
t1.lchild = &t2;
t1.rchild = &t3;
t2.rchild = &t4;
t3.lchild = &t5;
int deep=Deepth(&t1);
printf("deep=%d ", Deepth(&t1));
system("pause");
}