无法获得指向节点的指针

时间:2014-06-30 09:49:49

标签: c++ pointers binary-tree

我正在尝试创建自己的二叉树数据结构。

我使用BinaryNode<T>类作为带有BinaryNode<T>*根的叶子来跟踪根节点。

template<class T>
class PPBinaryTree {
private:
    BinaryNode<T>* root;

public:
    PPBinaryTree();

    bool add(T Data, BinaryNode<T>* Root); 

    T* search(T Data, BinaryNode<T>* Root);  
};  

以下是add函数的实现。无论我尝试什么,我都无法创建任何新的分支。 RootProbe似乎是分支指针的副本,因此当我为其分配Data时,分支中没有任何变化。

我能想到的唯一解决方案是改变行

RootProbe = (new BinaryNode<T>(Data));

*RootProbe = *(new BinaryNode<T>(Data)); 

但这只会使我的程序因未处理的异常而崩溃。

template<class T>
bool PPBinaryTree<T>::add(T Data, BinaryNode<T>* Root){
    bool isSuccessful = false;
    BinaryNode<T>* RootProbe;

    if(Root == NULL){
        Root = new BinaryNode<T>(Data);
        this->setRoot(Root);
        isSuccessful = true;
        return isSuccessful;
    }
    else{
        while(RootProbe != NULL){
            if(Data > Root->getData())
                RootProbe = Root->getRightBranch();
            else
                RootProbe = Root->getRightBranch();
        }
        RootProbe = (new BinaryNode<T>(Data));

        isSuccessful = true;
        return isSuccessful;
    }
}

以下是BinaryNode类:

template<class S>
class BinaryNode {
private:
    S data;
    BinaryNode *leftBranch;
    BinaryNode *rightBranch;

public:
    BinaryNode(S data);

    void setData(S data);

    S getData( );

    void setLeftBranch(BinaryNode newNode);

    BinaryNode* getLeftBranch( );

    void setRightBranch(BinaryNode newNode);

    BinaryNode* getRightBranch( );
};

1 个答案:

答案 0 :(得分:0)

我可以猜到:

while(RootProbe != NULL){
    if(Data > Root->getData())
        RootProbe = Root->getRightBranch();
    else
        RootProbe = Root->getRightBranch();
}
RootProbe = (new BinaryNode<T>(Data));

必须更改,从右侧和左侧分支初始化RootProbe。 您也忘了在树中的某处设置RootProbe。

BinaryNode<T>* LastLiveProbe;
while(RootProbe != NULL){
    if(Data > Root->getData())
    {
        RootProbe = Root->getLeftBranch();
        if (RootProbe == NULL)
            LastLiveProbe->setLeftBranch(new BinaryNode<T>(Data));
        else
            LastLiveProbe = RootProbe;
    }
    else
    {
        RootProbe = Root->getRightBranch();
        if (RootProbe == NULL)
            LastLiveProbe->setRightBranch(new BinaryNode<T>(Data));
        else
            LastLiveProbe = RootProbe;
    }
}

如果您没有其他问题,那应该会有所帮助。