编写一个程序,使用堆栈将表达式 a b + c d e + * * 转换为表达式树
Write a program, which converts the expression a b + c d e + * * into an expression tree using stack.
说明我不知道如何完成这项任务....但我只是创建了一个树并输入值。任何人都可以帮我完成这项任务...堆栈也是节点类型,我们必须推送像 ab+ 这样的运算符的值,所以我们将 a 作为节点推送,然后 b 作为节点,当 + 到来时,我们制作一棵树,a 和 b 将是它的叶节点。
.法典
#include<iostream>
using namespace std;
class Node{
public:
int data;
Node *left;
Node *right;
Node()
{
data = 0;
left = NULL;
right = NULL;
}
};
class Tree
{
Node *root;
void insert(int d, Node *node)
{
if (d < node->data)
{
if (node->left == NULL)
{
Node *leaf = new Node();
leaf->data = d;
node->left = leaf;
}
else
{
insert(d, node->left);
}
}
else
{
if (node->right == NULL)
{
Node *leaf = new Node();
leaf->data = d;
node->right = leaf;
}
else
{
insert(d, node->right);
}
}
}
void inOrderDisplay(Node *subRoot)
{
if (subRoot != NULL)
{
inOrderDisplay(subRoot->left);
cout << subRoot->data << " ";
inOrderDisplay(subRoot->right);
}
}
void postOrderDisplay(Node *subRoot)
{
if (subRoot != NULL)
{
postOrderDisplay(subRoot->left);
postOrderDisplay(subRoot->right);
cout << subRoot->data << " ";
}
}
void preOrderDisplay(Node *subRoot)
{
if (subRoot != NULL)
{
cout << subRoot->data << " ";
preOrderDisplay(subRoot->left);
preOrderDisplay(subRoot->right);
}
}
void deleteSubtree(Node *subRoot)
{
if (subRoot != NULL)
{
deleteSubtree(subRoot->left);
deleteSubtree(subRoot->right);
cout << "ndeleting: " << subRoot->data;
delete subRoot;
subRoot = NULL;
}
}
public:
Tree()
{
root = NULL;
}
~Tree()
{
deleteAll();
}
void insert(int d)
{
if (root == NULL)
{
Node *leaf = new Node();
leaf->data = d;
root = leaf;
}
else
{
insert(d, root);
}
}
void inOrderDisplay()
{
inOrderDisplay(root);
}
void postOrderDisplay()
{
postOrderDisplay(root);
}
void preOrderDisplay()
{
preOrderDisplay(root);
}
void deleteAll()
{
deleteSubtree(root);
}
};
.主类:
#include<iostream>
#include"task1.h"
using namespace std;
void main()
{
Tree tree;
tree.insert(10);
tree.insert(6);
tree.insert(14);
tree.insert(5);
tree.insert(8);
tree.insert(11);
tree.insert(18);
cout << endl;
system("pause");
//tree.deleteAll();
}
根据你在这里的代码,你只有一个void insert(int d, Node *node)
函数,没有void insert(operator o, Node *node)
函数。
我认为这表明您在这里错过了一个重要的观点。树中的每个节点都可以是整数(如您所做的那样)或运算符。在这两种情况下,我都称它为字符串。每个不是叶的节点都必须是运算符,并且所有叶子都必须是整数(或在本例中表示运算符/整数的字符串)。
然后,遍历输入,前三项应如下所示:
+
/
a b
下一步是构建更多的子树(不确定你拥有的输入的定义),将它们保留在你的堆栈中,然后构建更多的树内部节点。
因此,如果我上面显示的树称为Tree(+)
(为了便于使用),并且初始堆栈是[a,b,+,c,d,e,*,*]
,那么在一次迭代之后,您将拥有[Tree(+),c,d,e,*,*]
并从那里继续。
相关文章:
- 如何将Javascript正则表达式转换为C++11正则表达式
- 使用向量将给定表达式转换为波兰表示法时出现运行时错误
- 如何使用 cpp 将 z3 表达式转换为字符串
- 如何将表达式转换为变量
- 不是表达式转换,而是从预序到Inorder(不是表达式)的转换
- 中缀到后缀表达式转换代码不起作用
- 使用Stacks从中缀表达式转换为后缀(C++)
- 将Perl正则表达式转换为等效的ECMAScript正则表达式
- 如何将c样式的正则表达式转换为c++样式
- 您可以将C++ std::regex 表达式转换为 C# 表达式吗?
- 使用 c++ 或 Qt 将 SQL LIKE 表达式转换为正则表达式
- 将C++Boost正则表达式转换为Python正则表达式
- 如何将C#中的Lambda表达式转换为C++
- 使用cout将表达式转换为赋值
- 我的数学表达式转换器无法正确打印
- 将带有变量捕获的lambda表达式转换为函数指针
- Lambda表达式转换
- Qt正则表达式增强正则表达式转换从字符串内部取数
- c++正则表达式将正则表达式转换为c++代码
- 助推::精神::气.如何将内联语法分析器表达式转换为独立语法,以及如何解压缩它们生成的元组