描述 我不知道如何完成这项任务....但我刚刚创建了一个树并输入了值。任何人都可以帮助我完成这项任务......堆栈也是节点类型,我们必须推动像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();
}
答案 0 :(得分:1)
根据您在此处的代码,您只有void insert(int d, Node *node)
函数,没有void insert(operator o, Node *node)
函数。
我认为这表明你错过了一个重要的观点。树中的每个节点都可以是整数(如您所做)或运算符。在这两种情况下,我都称它为字符串。非叶子的每个节点都必须是运算符,并且所有叶子必须是整数(或者在我们的例子中表示运算符/整数的字符串)。
然后,迭代输入,前三项应该会产生类似的结果:
+
/ \
a b
下一步是构建更多的子树(不确定你所拥有的输入的定义),将它们保存在堆栈中,然后构造树的更多内部节点。
因此,如果上面显示的树名为Tree(+)
(为了便于使用),并且初始堆栈为[a,b,+,c,d,e,*,*]
,那么在一次迭代后您将拥有[Tree(+),c,d,e,*,*]
你继续从那里开始。