1. 采用递归方法实现
int getTreeHeight1(BiTree T) {
if (T == NULL) {
return 0;
}
int lheight, rheight;
lheight = getTreeHeight1(T->lchild);
rheight = getTreeHeight1(T->rchild);
return rheight > lheight ? (rheight + 1) : (lheight + 1);
}
2.采用非递归方法实现
这个算法采用层次遍历
int getTreeHeight2(BiTree T) {
queue Q;
init_queue(&Q);
BiTree p = T;
int depth = 0;
enqueue(&Q, p);
while (!queueisempty(&Q)) {
depth++;
int size = getsize(&Q);
for (int i = 0; i < size; i++) {
p = dequeue(&Q);
if (p->lchild != NULL) {
enqueue(&Q, p->lchild);
}
if (p->rchild != NULL) {
enqueue(&Q, p->rchild);
}
}
}
return depth;
}