第六章——2

本文介绍了一种使用二叉树结构存储和计算中缀表达式的方法,并提供了一个具体的算法实现示例。文章详细解释了如何通过递归后序遍历的方式计算表达式的值,以及如何确定二叉树的深度。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

表达式(中缀表达式)存储在一棵以二叉链表为存储结构的二叉树中(二叉树结点的data域为字符型),编写程序求出该表达式的值

分析:先求左子树所表示的表达式的值,再求右子树所表示的表达式的值,最后左右子树与根结点最后一次运算得到的结果就是整个表达式的数值。

int comp (BTNode *p)
{
    int A,B;
    if (p!=NULL)
    {
        if (p->lchild!=NULL&&p->rchild!=NULL) 
        /*如果当前结点的左子树和右子树非空,则为表达式,用后序遍历方式求值*/
        {
            A=comp(p->lchild); /*后序遍历求出左子树的值,赋值给A*/
            B=comp(p->rchild); /*后序遍历求出右子树的值,赋值给B*/
            return op(A,B,P->data); /*根据已求得的A和B和当前结点的运算符求出整个表达式*/
        }
        else
            return p->data-'0'; /*如果当前结点的左右子树都为空,则为数值,直接返回*/
    }                           //p->data-'0'是将字符型数字转化为整型数字
    else return 0; /*如果是空树,则表达式的值为0*/
}

函数op(int A,int B,char C);返回的是以C为运算符,以A、B为操作数的算式的数值。

求一棵二叉树的深度,二叉树以二叉链表为存储方式。

左子树深度为LD,右子树深度为RD,则整棵树的深度为max{LD:RD}+1,即左子树与右子树深度的最大值再加上1.

int getDepth(BTNode *p)
{
    int LD,RD;
    if(p==NULL)
    {
        return 0; //如果是空树则返回0
    }
    else
    {
        LD=getDepth(p->lchild);//求左子树深度
        RD=getDepth(p->rchild);//求右子树深度
        return (LD>RD?LD:RD)+1;//返回左、右子树深度的最大值加1
                               //即求整棵树的深度
    }
}

LD>RD?LD:RD三目运算符表达式。一般形式为A>B?A:B,其中A、B、C为3个 表达式,如果A的值为真,则返回B的值,否则返回B的值。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值