C ++二进制树,修改根节点,指向根节点的指针

时间:2014-01-13 02:25:52

标签: c++ binary-tree

我意识到标题不太具描述性,所以这里有细节。我正在用C ++实现我自己的二进制树类。在大多数情况下,我已经编写了一个模板Node类和模板Binary Tree类,并且我坚持了一些东西。我创建了一个空的二叉树(根节点为空),当我尝试设置该节点时,它失败了。这是代码和更多解释:

template<class T> class Node
{
    T _key;
    Node<T> *_leftChild;
    Node<T> *_rightChild;

    public:
        Node();
        Node(T key);
        Node(T key, Node<T> *leftChild, Node<T> *rightChild);
        ~Node();

        bool hasLeftChild();
        bool hasRightChild();

        void setKey(T key);
        void setLeftChild(Node<T> *node);
        void setRightChild(Node<T> *node);

        T getKey();
        Node<T>* getLeftChild();
        Node<T>* getRightChild();

        bool compare(Node<T> *compareNode); // return true if this.Node < compareNode
};

节点实现不是真的必要..(我不认为)它很长。

#include "Node.cpp"
#include <iostream>
using namespace std;

template<class T> class BinaryTree
{
    Node<T> *_root;

    public:
        BinaryTree();
        BinaryTree(Node<T> *root);
        ~BinaryTree();

        Node<T>* getRoot();
        void insert(Node<T> **root, Node<T> *node);
};

template<class T>
BinaryTree<T>::BinaryTree()
{
    this->_root = NULL;
}

template<class T>
BinaryTree<T>::BinaryTree(Node<T> *root)
{
    this->_root = root;
}

template<class T>
BinaryTree<T>::~BinaryTree()
{
    // delete stuff
}

template<class T>
Node<T>* BinaryTree<T>::getRoot()
{
    return this->_root;
}

template<class T>
void BinaryTree<T>::insert(Node<T> **root, Node<T> *node)
{
    if(!*root)
    {
        *root = node;
    }
}

主:

BinaryTree<int> *tree = new BinaryTree<int>();

Node<int> *root = tree->getRoot();
Node<int> **root1 = &root;

cout << tree->getRoot() << endl;
Node<int> *noChildrenNode = new Node<int>(2);
tree->insert(&root1, noChildrenNode);
cout << tree->getRoot() << endl;

插入当前功能只是将NULL根指针替换为作为参数传入的节点指针。失败的悲惨部分是因为指针是一个副本,它实际上并没有设置根节点..但我似乎无法弄清楚如何设置指向根节点的指针,以便它可以被改变。我必须要近距离接受任何帮助,我们将非常感激。

由于

1 个答案:

答案 0 :(得分:0)

首先,您必须包含任何错误消息的确切文本。 “悲惨地失败”是不够的。

我想你想要

 root = node;

 *root = node;

因为如果root为null,则使用* root是空指针异常。

相关问题