算法思想:
①后序非递归遍历二叉树,用栈存储结点,用队存储最长的枝;
②当访问到某结点时,这时栈中结点是他的所有祖先;
③比较栈和队列元素数量,超过则更新队列。
typedef struct BTNode{
int data;
struct BTNode *lchild;
struct BTNode *rchild;
}BTNode,*BiTree;
void function(BiTree T){
BiTree S[MAXSIZE],Q[MAXSIZE],p=T,r=NULL;
int front=-1,rear=-1,top=-1;
while(p||top >-1){
while(p){ //走到最左边
S[++top]=p;
p=p->lchild;
}
if(!p){
p=S[top];
if(p->rchild && p->rchild!=r){ //如果有右子树且右子树未被访问
p=p->rchild;
S[++top]=p;
p=p->lchild;
}
else{
p=S[top--];
if(!p->lchild && !p->rchild){ //如果该结点为叶子,且路径最长
if(top+2 > rear-front){ // 更新路径