设一个仅包含运算二元算术表达式,以链表二叉树存储,写出计算该表达式的算法

基于后续遍历思想,递归计算左右子树的结果最后根据根节点的操作符计算结果

typedef struct BiTNode{
    ElemType data;
    struct BiTNode *lchild,*rchild;
}*BiTree;
//对二叉链表树中的结点计算
ElemType Calculate(BiTree T){    
	BiTNode *p = T;    //创建指针指向根结点    
	ElemType val_l, val_r;        
	if(T){
		val_l = Calculate(p->lchild);    //递归计算左、右子树
		val_r = Calculate(p->rchild);
		switch(p->optr){        //根据根节点的字符将左右子结果计算为当前这一层子树的结果
			case'+':
				value = val_l + val_r;
				break;
			case'-':
				value = val_l - val_r;
				break;
			case'*':
				value = val_l * val_r;
				break;
			case'/':
				value = val_l / val_r;
				break;
			default:
				break;
		}
	}
	return value;
}

猜你喜欢

转载自blog.csdn.net/qq_37504771/article/details/111999774