如何将表达式二叉树输出为中缀表达式(带括号)

中缀表达式是最符合我们人类阅读的一种方式,因为它和我们日常的数学表达式很接近

算法思想:基于二叉树的中序遍历,但是我们要给关键位置加上左括号和右括号。除了根结点和叶子结点,遍历到其他结点的时候,在遍历左子树之前加左括号,遍历完右子树后加上右括号。

void Ready2Btree2Exp(BTree *root)
{
	Btree2Expression(root, 1);	//根结点的高度为1
}

void Btree2Expression(BTree *root, int deep)
{
	if(root == NULL)
	{
		return;		//根结点为空,说明是个空树
	}
	else if(root->lchild==NULL && root->rchild==NULL)
	{
		//为叶子结点
		printf("%s", root->data);	//输出操作数,但是不用加括号
	}
	else
	{
		if(deep > 1)
		{
			printf("(");		//还有子表达式,要加括号
		}
		Btree2Expression(root->lchild, deep+1);//递归调用遍历左边
		printf("%s", root->data);
		Btree2Expression(root->rchild, deep+1);
		if(deep > 1)
		{
			printf(")");		
		}
	}
}

  • 5
    点赞
  • 32
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
### 回答1: 要将一个达式二叉树转换成中缀树,可以按照以下步骤进行: 1. 对于叶子节点,直接将节点的值作为中缀达式的一个操作数。 2. 对于非叶子节点,如果节点的值是一个运算符,则将其左子树和右子树分别转换成中缀达式,并将它们与当前节点的运算符拼接成一个完整的中缀达式。 3. 如果当前节点的值不是运算符,则直接将其值作为中缀达式的一个操作数。 4. 最终得到的中缀达式即为中缀树。 举例说明,假设有以下的达式二叉树: ``` * / \ + 5 / \ 3 4 ``` 按照上述步骤进行转换,可以得到以下的中缀树: ``` __*__ / \ + 5 / \ 3 4 ``` 其中,中缀达式为:3 + 4 * 5。 ### 回答2: 达式二叉树转换成中缀树是将一个以达式二叉树示的数学达式转换为中缀达式的过程。 要将达式二叉树转换为中缀树,可以使用递归的方法进行操作。首先,我们需要理解达式二叉树的结构。 达式二叉树是一种二叉树,其中每个节点都可以是操作符或操作数。操作符节点的左子树和右子树分别代了操作符的两个操作数,而操作数节点则没有子节点。 要将达式二叉树转换为中缀树,可以按照以下步骤进行操作: 1. 若当前节点为操作数节点,则直接返回该节点的值作为中缀达式的一个操作数。 2. 若当前节点为操作符节点,则需要将其左子树和右子树分别转换为中缀达式,并用当前节点的值将它们连接起来。 3. 需要注意的是,由于中缀达式要求操作符的顺序和优先级,需要添加一些括号来确保正确计算。具体来说,如果当前节点的操作符比其左子节点的操作符优先级低,则需要在左子节点的中缀达式前后添加括号。如果当前节点的操作符比其右子节点的操作符优先级低(或相等),则只需要在右子节点的中缀达式前后添加括号。 4. 最后,将经过上述操作得到的中缀达式返回。 通过以上步骤,我们可以将达式二叉树转换为对应的中缀树。这样做的好处是方便理解和运算,同时也符合数学达式的规范形式。 ### 回答3: 达式二叉树是一种用二叉树示数学达式的结构,其中每个节点都是操作符或操作数。要将达式二叉树转换成中缀达式,需要遵循以下步骤: 1. 从根节点开始遍历二叉树。如果当前节点是操作数,则直接将其值作为中缀达式的一个值。 2. 如果当前节点是操作符,则将其值添加到中缀达式中。 3. 检查当前节点的左右子节点。如果子节点也是操作符,则使用括号将它们括起来,并将其添加到中缀达式中。 4. 重复步骤1-3,直到遍历结束并生成完整的中缀达式。 例如,考虑以下达式二叉树: + / \ * 3 / \ 2 5 从根节点开始遍历,首先遇到操作符'+', 将其添加到中缀达式中,得到'+'。 然后检查左子节点,发现是操作符'*',将其添加到中缀达式,现在达式变为'*+'。 然后检查左子节点的左子节点,发现是操作数2,将其添加到中缀达式中,现在达式为'2*+'。 然后检查左子节点的右子节点,发现是操作数5,将其添加到中缀达式中,得到'2*5+'。 最后检查根节点的右子节点,发现是操作数3,将其添加到中缀达式中,最终得到完整的中缀达式'2*5+3'。 通过以上步骤,我们可以将达式二叉树转换成中缀达式

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值