第六章——2

表达式(中缀表达式)存储在一棵以二叉链表为存储结构的二叉树中(二叉树结点的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的值。

猜你喜欢

转载自blog.csdn.net/qq_41661831/article/details/81164833