• 2022-06-03
    假设二叉树采用二叉链存储结构存储,设计一个算法,输出该二叉树中第一条最长的路径长度,并输出此路径上各节点的值。
  • 解:采用基于先序递归算法的思路。用[tex=2.0x1.214]60QgBHhP1bYchH9IcCF6sg==[/tex]保存扫描到当前节点的路径, [tex=3.357x1.214]LnL+or6ZaYFHoiqM1kBkFg==[/tex]保存扫描到当前节点的路径长度, [tex=3.857x1.214]pdNwS51hKAMXGIR5OAPuAA==[/tex]保存最长的路径, [tex=5.214x1.214]6JWIb+Izvr1lhYQLLUauzQ==[/tex]保存最长路径长度。当[tex=0.429x1.0]JThLUuJ8WswSAPiYZWihWg==[/tex]为空时,表示当前的一个分支已扫描完毕,将[tex=3.357x1.214]LnL+or6ZaYFHoiqM1kBkFg==[/tex]与 [tex=3.857x1.214]pdNwS51hKAMXGIR5OAPuAA==[/tex]进行比较,将较长的路径及路径长度分别保存在[tex=3.857x1.214]pdNwS51hKAMXGIR5OAPuAA==[/tex]和 [tex=3.357x1.214]LnL+or6ZaYFHoiqM1kBkFg==[/tex]中。对应的算法如下:void LongPath( BTNode * b,ElemType path[ ] , int pathlen, ElemType longpath[ ] ,    int &longpathlen){    int i;    if ( b== NUILL)    {    if (pathlen > longpathlen)    //若当前路径更长,将路径保存在longpath中        {    for ( i - pathlen1;i>- o;i--)                    longpath[ i]= path[ i];            longpathlen = pathlen;        }    }    else    {    path[ pathlen] = b-> data;    //将当前节点放入路径中        pathlen++ ;    //路径长度增1        LongPath(b- > lchild, path, pathlen, longpath, longpathlen);                //递归扫描左子树        LongPath(b- > rchild, path, pathlen, longpath,longpathlen) ;            //递归扫描右子树    }}设计如下主函数:void main(){    BTNode * b;    ElemType path[ MaxSize], longpath[ MaxSize];    int i, lonagpathlen = o;    CreateBTNode( b, "A( B( D(,G)),C(E,F))") ;    printf("括号表示法:");    DispBTNode(b) ; printf"\n");    LongPath( b, path,0, longpath, longpathlen) ;    printf("第一条最长逆路径长度:8dn" , 1ongpathlen) ;    printf("第一条最长逆路径:");    for ( i = longpathlen; i>= 0; i—- )        printf(" ÷ c " , longpath[ i]);    printf( "\n");}程序执行结果如下:括号表示法:A(B( D(,c)),C(E.F))第一条最长逆路径长度:4第―条最长逆路径:GD B A

    内容

    • 0

      假设二叉树中每个节点值为单个字符,采用二叉链存储结构存储。设计一个算法,输出二叉树b中第k层(根节点的层次为1)上的所有叶子节点。

    • 1

      假设二叉树中每个节点值为单个字符,采用二叉链存储结构存储。设计一个算法求二叉树b的最小枝长。所谓最小枝长是指的是根节点到最近叶子节点的路径长度。

    • 2

      假设二叉树中每个节点值为单个字符,采用二叉链存储结构存储。设计一个算法,求二叉树b中第k层上节点个数。

    • 3

      【树和二叉树课后习题三算法设计】 (7)求任意二叉树中第一条最长的路径长度,并输出此路径上各结点的值。

    • 4

      假设二叉树采用二叉链存储结构,设计一个算法把树[tex=0.429x1.0]JThLUuJ8WswSAPiYZWihWg==[/tex]的左,右子树进行交换。要求不破坏原二叉树。