二分木にノードを追加する簡単なプログラムを C# で作成しました。メインの親ノードを保持するオブジェクト フィールド「ルート」があります。ノードを追加するたびに、親ノードのデータを取得してツリーからトラバースします。
これが私のコードです
public class BTNode
{
public int Value { get; set; }
public BTNode Left { get; set; }
public BTNode Right { get; set; }
public BTNode Root { get; set; }
}
public class BinaryTree
{
public BinaryTree()
{
size = 0;
Root = null; //To hold the main Parent Node
}
int size;
object Root;
public void AddNode(int value)
{
BTNode NewNode = new BTNode();
if (Root != null)
{
NewNode = (BTNode)Root; //If tree exists, Get the Root Node
}
while (NewNode.Root != null)
{
if (value < NewNode.Value)
{
NewNode.Root = NewNode.Left;
}
else if (value > NewNode.Value)
{
NewNode.Root = NewNode.Right;
}
}
size++;
NewNode.Value = value; //OBJECT 'ROOT' GETTING UPDATED AT THIS POINT
NewNode.Root = NewNode; //self pointer
NewNode.Left = null;
NewNode.Right = null;
if (size == 1)
{
Root = (object) NewNode; //if this is the Parent Node(First Node)
} //then update the Root to be the parent Node
}
}
「ルート」にバイナリツリーの親ノードのみを保持したい..サイズ= 1の場合、つまりツリーの最初のノードである場合にのみ最後の行を実行したいが、何をしてもルートは毎回更新されるノード。なぜこれが起こっているのかを知るのに苦労しています。助けてください。ここにコンセプトやロジックがありませんか?