假设二叉树采用二叉链表存储结构存储 试设计一个算法 求出该二叉树中第一条最长的路径长度以及此

学历类 求出,路径,算法 已帮助 人

假设二叉树采用二叉链表存储结构存储,试设计一个算法,求出该二叉树中第一条最长的路径长度以及此路径上各结点的值。

请帮忙给出正确答案和分析,谢谢!

热搜:二叉树的深度为k,则二叉树最多有

答案解析

难度★★☆ 搜索
  • 正确答案:void Longpath(BiTree bTElemType path[]int pathlenTElemType longpath[]int longpathlen){ int i; if(b==NULL){ if(pathlen>longpathlen){ //若当前路径更长将路径保存在longpath中 for(i=pathlen-1;i>=0;i--) longpath[i]=path[i]; longpathlen=pathlen; } } else{ path[pathlen3=b->data; //将当前结点放入路径中 pathlen++; //路径长度增l Longpath(b->lchildpathpathlenlongpathlongpathlen);//递归扫描左子树 Longpath(b->rchildpathpathlenlongpathlongpathlen);//递归扫描右子树 path]en--; //环境恢复 } }
    void Longpath(BiTree b,TElemType path[],int pathlen,TElemType longpath[],int longpathlen){ int i; if(b==NULL){ if(pathlen>longpathlen){ //若当前路径更长,将路径保存在longpath中 for(i=pathlen-1;i>=0;i--) longpath[i]=path[i]; longpathlen=pathlen; } } else{ path[pathlen3=b->data; //将当前结点放入路径中 pathlen++; //路径长度增l Longpath(b->lchild,path,pathlen,longpath,longpathlen);//递归扫描左子树 Longpath(b->rchild,path,pathlen,longpath,longpathlen);//递归扫描右子树 path]en--; //环境恢复 } } 解析:采用path数组保存扫描到当前结点的路径,pathlen保存扫描到当前结点的路径长度,longpath数组保存最长的路径,longpathlen保存最长路径长度。当b为空时,表示当前扫描的一个分支已扫描完毕,将pathlen与longpathlen进行比较,将较长路径及路径长度分别保存在longpath和longpathlen中。