节点不附加到树

时间:2016-03-31 01:54:20

标签: c++ binary-tree

我实现了一个二叉树来存储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;
}

1 个答案:

答案 0 :(得分:0)

Node* insertNode(int e, Node* node){
    Node* newNode = new Node(e);
    node = newNode;
    return node;
}

将名为“node”的参数传递给“insertNode()”方法。您创建一个新节点,并将其分配给参数。

这绝对没有任何结果。所以呢?在此函数返回后,您对其参数所做的操作将完全被遗忘。只是遥远的记忆。

根据您调用insertNode()方法的方式判断,您可能打算通过引用而不是按值传递此参数。