答案:
算法描述]
Void LongestPath(BiTree bt)//求二叉树中的第一条最长路径长度
{BiTree p=bt,l],s];
//l, s是栈,元素是二叉树结点指针,l中保留当前最长路径中的结点
Int i,top=0,tag],longest=0;
While(p || top>0)
{while(p) {s++top]=p;tagtop]=0; p=p->Lc;} //沿左分枝向下
If(tagtop]==1) //当前结点的右分枝已遍历
{if(!stop]->Lc && !stop]->Rc) //只有到叶子结点时,才查看路径长度
If(top>longest)
{for(i=1;i<=top;i++) li]=si]; longest=top; top--;}
//保留当前最长路径到l栈,记住最高栈顶指针,退栈
}
Else if(top>0) {tagtop]=1; p=stop].Rc;} //沿右子分枝向下
}//while(p!=null||top>0)
}//结束LongestPath