2010-12-08 10 views
0

私は非常に奇妙な問題があります。基本的には、ツリー内のノードを表すTreeNodeというクラスを作成しました。次に、すべてのノードをリストに追加してツリーを作成します。すべての参照が葉までのルートから完全に取り組んで - 私はちょうど木の作成後にブレークポイントを入れて、Visual Studioで、リストの上にマウスを置く場合リストから削除するとオブジェクトの参照が失われる

class TreeNode 
{ 

    private TreeNode parent, lChild, rChild; 
    private int key, val; 

    public int Key 
    { 
     get { return key; } 
     set { key = value; } 
    } 
    public int Val 
    { 
     get { return val; } 
     set { val = value; } 
    } 

    public TreeNode Parent 
    { 
     get { return parent; } 
     set { parent = value; } 
    } 
    public TreeNode LChild 
    { 
     get { return lChild; } 
    } 
    public TreeNode RChild 
    { 
     get { return rChild; } 
    } 

    public TreeNode(int k, int v) 
    { 
     key = k; 
     val = v; 
    } 

    public void SetChild(TreeNode leftChild, TreeNode rightChild) 
    { 
     this.lChild = leftChild; 
     this.rChild = rightChild; 

    } 

    public bool isLeaf() 
    { 
     if (this.lChild == null && this.rChild == null) 
     { 
      return true; 
     } else 
     { 
      return false; 
     } 
    } 

    public bool isParent() 
    { 
     if (this.parent == null) 
     { 
      return true; 
     } 
     else 
     { 
      return false; 
     } 
    } 

    public void SetParent(TreeNode Parent) 
    { 
     this.parent = Parent; 
    } 
} 

だから私は、ツリーの構造を見ることができます。

しかし私は、次の手順を実行している場合:

TreeNode test = newTree[newTree.Count - 1]; 

は注意してください:

ルートノードを返します
private List<TreeNode> newTree = new List<TreeNode>(); 

- 私は1つの下のレベルに行うことができますし、再び上にマウスを移動(すなわち左の子または右子ども)しかし、これらの子どもたちはその後、子どものための参照を持っていません。

テストノードがリストの一部ではないので、私はリスト内の他のノードにメモリ内の参照を失っているのだろうか?

ご協力いただければ幸いです。

おかげ トムあなたはあなたが持っていない

答えて

1

おそらく(ツリーの新しい空の配列を作成します

TreeNode test = new Tree[newTree.Count - 1]; 

ない(あなたのコードでは新しいとツリーの間にスペースを注意していない)何あなたは意図していた)、元のツリーは根を張らずにアクセスできないままにしておきます。

コードが正しいことを確認できますか?

+0

。 –

+0

こんにちは、私は明確ではないことをお詫びします... 'newtree'はTreeNodeのリストです - 私が知っているばかげた命名規則です。ので、コードは正解です、ありがとう – TomP89

0

問題を見つけたように見えます - 親ノードのいくつかを関連する子ノードで正しく更新していない - 問題が解決しました。

あまりにも私の推測だったあなたの助けをありがとう トム

関連する問題