Привет У меня возникла небольшая проблема с удалением из двоичного дерева в C#. Я не знаю, почему, но этот код не работает хорошо (мое дерево не изменяется после вызова метода удаления). Вот мой код:Удалить из двоичного дерева C#
public class BinaryTree<T>
{
public BinaryTree<T> Left, Right;
public T Data;
public BinaryTree()
{
this.Left = null;
this.Right = null;
}
}
public BinaryTree<T> FindNode(T value,ref BinaryTree<T> myTree)
{
if (myTree == null)
return null;
else
{
int result = Comparer<T>.Default.Compare(value, myTree.Data);
if (result == 0)
return myTree;
else if (result > 0)
return FindNode(value, ref myTree.Right);
else if (result < 0)
return FindNode(value, ref myTree.Left);
}
return myTree;
}
public void RemoveValue(T value,ref BinaryTree<T> myTree)
{
BinaryTree<T> helper = new BinaryTree<T>();
BinaryTree<T> MyTree = myTree;
if (MyTree == null) return;
MyTree =FindNode(value,ref MyTree);
if (MyTree.Left == null || MyTree.Right == null)
helper = MyTree;
else
{
helper = MyTree.Left;
while (helper.Right!=null)
helper = helper.Right;
MyTree.Data = helper.Data;
}
if (helper.Left == null)
helper = helper.Right;
else
helper = helper.Left;
}
BinaryTree, представляющий каждый узел в моем дереве.
FYI не нужно использовать ключевое слово 'ref' в' FindNode', так как вы не переназначаете vlaue на 'myTree' – juharr
Вы подтвердили, что ваш метод FindNode работает правильно/по назначению? – KDecker
FindNode работает отлично, он возвращает узел со значением из метода RemoveValue – dawcza94