我实现了一个二叉树来存储C ++中的算术表达式。但是,我在向树插入节点时遇到了一些麻烦。我想通过解析元素和地址将节点插入到树中。
崩溃,可能是因为节点没有附加到树上。
希望你们能帮助我解决这个问题。任何实现二叉树来存储算术表达式的方法都是受欢迎的。
这是我的计划:
struct Node{
int element;
Node* left;
Node* right;
Node(int e){
this->element = e;
this->left = NULL;
this->right = NULL;
}
bool isInternal(){
return (this->left != NULL || this->right != NULL);
}
void print(){
if(isInternal()){
switch(this->element){
case 1:
cout << " + ";
break;
case 2:
cout << " - ";
break;
case 3:
cout << " * ";
break;
case 4:
cout << " / ";
break;
}
}
else
cout << this->element;
}
bool hasLeft(){
return (this->left != NULL);
}
bool hasRight(){
return (this->right != NULL);
}
};
class BinaryTree{
public:
Node* root;
void clearTree(Node* t){
if(t == NULL)
return;
if(t->left != NULL)
clearTree(t->left);
if(t->right != NULL)
clearTree(t->right);
delete t;
return;
}
BinaryTree(){
root = NULL;
}
~BinaryTree(){
clearTree(root);
}
bool isEmpty(){
return (root == NULL);
}
Node* insertNode(int e, Node* node){
Node* newNode = new Node(e);
node = newNode;
return node;
}
void printExpression(Node* node){
if(node->hasLeft()){
cout << "(";
printExpression(node->left);
}
node->print();
if(node->hasRight()){
printExpression(node->right);
cout << ")";
}
}
};
int main(){
BinaryTree* bt = new BinaryTree();
Node* root = bt->root;
bt->insertNode(1, root);
Node* n1 = bt->insertNode(3, root->left);
bt->insertNode(2, n1->left);
Node* n2 = bt->insertNode(2, n1->right);
bt->insertNode(4, n2->left);
bt->insertNode(1, n2->right);
Node* n3 = bt->insertNode(3, root->right);
bt->insertNode(3, n3->left);
bt->insertNode(5, n3->right);
bt->printExpression(root);
return 0;
}
答案 0 :(得分:0)
Node* insertNode(int e, Node* node){
Node* newNode = new Node(e);
node = newNode;
return node;
}
将名为“node”的参数传递给“insertNode()”方法。您创建一个新节点,并将其分配给参数。
这绝对没有任何结果。所以呢?在此函数返回后,您对其参数所做的操作将完全被遗忘。只是遥远的记忆。
根据您调用insertNode()
方法的方式判断,您可能打算通过引用而不是按值传递此参数。