数据结构(c语言版 5.2.2 二叉树的其他操作举例)

本文深入探讨了二叉树的查找、叶子节点计数及深度求解算法,通过具体实例展示了算法的实现过程,包括递归查找数据元素、计算叶子节点数量及确定二叉树深度。同时,还介绍了如何根据前序和中序序列构建二叉树。
  1. 查找数据元素。
    Search(bt, x):在以bt为二叉树的根结点指针的二叉树中查找数据元素x。查找成功时返回该结点的指针;查找失败时返回空指针。
    算法实现如下,注意遍历算法中的Visit (bt->data) 等同于其中的一组操作步骤。
    二叉树的元素查找算法

    BiTree Search(BiTree *bt,elemtype x)
    { / * 在bt为根结点指针的二叉树中查找数据元素x */
    BiTree p;
    p=bt;
    if (p->data= =x) return p; / * 查找成功返回 */
    if ( p->lchild!=NULL) / * 在p->lchild为根结点指针的二叉树中查找数据元素x */
    return (Search (p->lchild, x) );
    if ( p->rchild!=NULL) / * 在p->rchild为根结点指针的二叉树中查找数据元素x */
    return (Search (p->rchild, x));
    return NULL; / * 查找失败返回 */
    }

  2. 求二叉树叶子结点个数
    算法:
    int CountLeaf2 (BiTree *bt)
    { / * 开始时,bt为根结点所在链结点的指针,返回值为bt的叶子数 */
    if (btNULL) return(0);
    else if (bt->lchild
    NULL && bt->rchild==NULL)
    return (1);
    else
    return (CountLeaf2 (bt->lchild)+CountLeaf2 (bt->rchild));
    }

  3. 求二叉树的深度运算。
    求深度算法同样可以通过遍历操作来实现,算法如下

    int treehigh (BiTree *bt)
    { int lh,rh,h;
    if (bt==NULL) h=0;
    else
    { lh=treehigh(bt->lchild);
    rh=treehigh (bt->rchild);
    h=(1h>rh-1h:rh)+1;
    }
    return h;
    }

  4. 已知结点的前序序列和中序序列分别如下。
    前序序列:A B C D E F G
    中序序列:C B E D A F G
    则可按上述分解求得整棵二叉树。其构造过程如图所示。首先由前序序列得知二叉树的根为A,则其左子树的中序序列为(C B E D),右子树的中序序列为(F G)。反过来得知其左子树的前序序列必为(B C D E),右子树的前序序列为(F G)。类似地,可由左子树的前序序列和中序序列构造得A的左子树,由右子树的前序序列和中序序列构造得A的右子树。

    在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值