找二叉树根节点到叶子结点最长路径

void Findpath(BiTree T){//后序遍历法寻找从根节点到叶子结点最长路径
    BiTree stack[MaxSize],path[MaxSize],p=T,r;
    int top=-1,max=-1;
    while(p||top!=-1)
    {
        while(p){
            stack[++top]=p;
            p=p->lchild;
        }
        p=stack[top];
        if(p->rchild&&p->rchild!=r){
            p=p->rchild;

        }
        else{
            if(p->rchild==NULL && p->lchild==NULL){
                if(top+1>max){
                    for(int i=0;i<=top;i++)
                        path[i]=stack[top-i];
                    max=top+1;
                }

            }
            top--;//退栈
            r=p;
            p=NULL;//p置空
        }

    }
    for(int i=max-1;i>=0;i--){
        printf("%d",path[i]->data);
    }

}

你可能感兴趣的:(数据结构,算法)