2017-05-24 19 views
-3

に父親ノードを設定:C++、私は以下のクラスを持っている木

class Node 
{ 
    private: 
    Node* leftChild; 
    Node* rightChild; 
    Node* father; 
    public: 
    Node() { leftChild = rightChild = father = NULL; };  
    Node* getLeftChild() { return leftChild; }; 
    Node* getRightChild() { return rightChild; }; 
    Node* getFather() { return father; } 
    void setRightChild(Node* child) { rightChild = child; } 
    void setLeftChild(Node* child) { leftChild = child; }; 
    void setFather(Node* f) { father = f; }; 
}; 

左の子と右の子を設定するときに私も父のノードを設定します。私は試してみます:

void setLeftChild(Node* child) 
{ 
    leftChild = child; 
    child->setFather(this); 
};  

Node* node = new Node(); 
Node* node2 = new Node(); 

node->setLeftChild(node2); 

これは誤った使用のため、ランダムエラーが発生します。どのように機能を設定する必要がありますsetLeftChild()setRightChild()? ありがとうございます。

+0

なぜマザーノードですか?それはセクシストです。それが私たちを親と呼ぶ理由です。 *トリガされました* – arminb

+0

エラーの詳細を教えてください。 – noelicus

+0

**標準のコンテナである['std :: deque <>'](http://en.cppreference.com/ –

答えて

0

もちろん、あなた

node->setLeftChild(node); 

はナンセンスを生成します。あなたは、このようなナンセンスに対して有効なコードか(少なくともデバッグモードで)ガードを記述する必要がありますいずれか

void setLeftChild(Node* child) 
{ 
    if(child==this) 
    throw std::runtime_error("node cannot be its own child"); 
    leftChild = child; 
    child->setFather(this); 
};  

もう一つのアイデアは、father建設に提供する必要があります(とのみのためnullptrに等しい不変のメンバーを作ることですルートノード)、すなわち

struct Node 
{ 
    Node*const father;  // immutable, so might as well be public 
    Node(Node*f) : father(f) {} 
    Node*MakeLeftChild() // create left child and return it 
    { 
    if(!leftChild) 
     leftChild = new Node(this); 
    return leftChild; 
    } 
    Node*MakeRightChild() // create right child and return it 
    { 
    if(!rightChild) 
     rightChild = new Node(this); 
    return rightChild; 
    } 
private: 
    Node*leftChild=nullptr; // defaults to having no children 
    Node*rightChild=nullptr; 
}; 

auto root = new Node(nullptr); 
auto node = root->MakeLeftChild(); 
node = node->MakeRightChild(); 
+0

;プログラムが停止します。 – Discipulos

関連する問題