0
C++で算術式を格納するバイナリツリーを実装しています。しかし、ツリーにノードを挿入することにはいくつか問題があります。私は、要素とアドレスを解析することによってツリーにノードを挿入したい。ノードがツリーにアタッチされない
ノードがツリーにアタッチされないことが原因でクラッシュする可能性があります。
私はこの問題を解決するのに役立つことを願っています。算術式を格納するバイナリツリーを実装する他の方法のアイデアは大歓迎です。あなたの "insertNode()" メソッドに "ノード" と呼ばれるパラメータを渡す
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;
}
はい、私はパラメータを参照渡ししません。しかし、私は実際にどのように知りません。私は、ポインタを渡しているリファレンスを渡していると思った、しかし、それはこの時間を動作していません。 – Linh
'Node * insertNode(int e、Node *&node){...' –
C++に関する良い本を入手してください。それは参照が何であるか、そして値渡しと参照渡しの違いについて説明します。 –