用二叉树写中缀表达式

本文通过C++实现,详细讲解了如何利用二叉树来表示和处理中缀表达式,深入探讨了数据结构与算法在解决此类问题中的应用。
摘要由CSDN通过智能技术生成

参考数据结构与算法分析 C++描述。代码如下:

#include <iostream>
#include <stack>
#define ISCHAR 1
#define ISOPERATOR 2
#define OTHER 0
using namespace std;
struct BinaryNode
{
	char c;
	BinaryNode *left;
	BinaryNode *right;
	BinaryNode(char _c,BinaryNode *node1,BinaryNode *node2)
	{
		c=_c;
		left=node1;
		right=node2;
	}
};
int isCharOrOperator(char c)
{
	if(c>='a' && c<='z' || c>='A' && c<='Z')
		return ISCHAR;
	if(c=='+' || c=='-' || c=='*' || c=='/')
		return ISOPERATOR;
	return OTHER;

}
void traverse(BinaryNode *node)
{
	if (node!=NULL)
	{
		traverse(node->left);
		cout<<node->c;
		traverse(node->right);
	}
}
int main()
{
	stack<BinaryNode *> charStack;
	char c='0';
	while(cin>>c && c!='0')
	{
		if(ISCHAR=
为了将二叉树输出中缀表达式,我们可以使用中序遍历的方法。中序遍历是通过先遍历左子树,然后输出根节点,最后遍历右子树的方式。在遍历的过程中,我们需要在适当的位置添加括号。 具体算法的实现如下: 1. 如果当前节点为空,直接返回。 2. 如果当前节点是叶子节点,则输出节点的值。 3. 如果当前节点有左子树,则输出左括号。 4. 递归地遍历左子树。 5. 输出当前节点的值。 6. 如果当前节点有右子树,则输出右括号。 7. 递归地遍历右子树。 以下是一个示例的代码实现: ``` void BtreeToExp(BTree *root){ BtreeToExpHelper(root); } void BtreeToExpHelper(BTree *root){ if (root == NULL){ return; } else if (root->left == NULL && root->right == NULL){ printf("%s", root->data); } else { if (root->left != NULL){ printf("("); } BtreeToExpHelper(root->left); printf("%s", root->data); BtreeToExpHelper(root->right); if (root->right != NULL){ printf(")"); } } } ``` 通过以上算法,我们可以将二叉树输出为中缀表达式。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *3* [【数据结构学习笔记】——根据中缀表达式构建二叉树并输出](https://blog.csdn.net/henry903/article/details/50617907)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] - *2* [算法设计:将给定的二叉树输出其等价的中缀表达式](https://blog.csdn.net/m0_46405703/article/details/127449379)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值