1.利用递归
int ldepth,rdepth;
int bitree_height_by_recursive(bitree T)
{
if(T==nullptr)
return 0;
ldepth=bitree_height_by_recursive(T->lchild);
rdepth=bitree_height_by_recursive(T->rchild);
if(ldepth>rdepth)
return ldepth+1;
else
return rdepth+1;
}
2.利用后序遍历的同时记录节点的最大高度
int bitree_height_by_postorder(bitree T)
{
stack<bitree> s;
int count=0,maxnum=0; //maxnum用于记录最大高度
bitree p=T;
while(p||!s.empty())
{
if(p)
{
s.push(p);
count++;
if(count>maxnum)
count++;
p=p->lchild;
}
else
{
p=s.top();
if(p->rchild&&p->rchild->tag==false) //tag为后序遍历二叉树结点的标志位初始化为false意思为未访问
{
p=p->rchild;
s.push(p);
p=p->lchild;
}
else
{
count--;
p->tag==true;
p=nullptr;
s.pop();
}
}
}
return 0;
}