Я хочу преобразовать двоичное дерево в потоковое двоичное дерево.это мой алгоритм и код для конвертации.но я получаю ошибку "Исключение типа 'System.StackOverflowException' было сгенерировано."
public void ConvertToTBT(Node r, int[] inorder)
{
for (int i = 0; i < inorder.Length; i++)
{
Node temp = Search(r, inorder[i]);
if (i <= inorder.Length - 2)
if (temp.rightChild == null)
{
temp.rightChild = Search(r, inorder[i + 1]);
temp.is_right_thread = true;
}
if (i != 0)
if (temp.leftChild == null)
{
temp.leftChild = Search(r, inorder[i - 1]);
temp.is_left_thread = true;
}
}
}
, и это метод поиска (который находит узел и возвращает его), который я нашел здесь и использую в своем коде
public Node Search(Node root, int data)
{
if (root != null)
{
if (root.data == data)
return root;
else
{
Node foundNode = Search(root.leftChild, data);
if (foundNode == null)
foundNode = Search(root.rightChild, data);
return foundNode;
}
}
else
return null;
}
где я могу ошибиться?!
если у вас есть лучшая идея для преобразования BT в TBT, пожалуйста, помогите мне!
Обратите внимание, что мое деревоэто двоичный НЕ Бинарный поиск
также мой метод biuldTree
public Node BuildTree(int[] inorder, int[] preorder, int instart, int inend)
{
if (instart > inend)
return null;
if (preindex >= inorder.Length)
return null;
int pickedpre = preorder[preindex];
preindex++;
Node newnode = new Node(pickedpre);
if (instart == inend)
return newnode;
for (int i = 0; i < inorder.Length; i++)
{
if (inorder[i] == pickedpre)
{
inindex = i;
break;
}
}
newnode.leftChild = BuildTree(inorder, preorder, instart, inindex - 1);
newnode.rightChild = BuildTree(inorder, preorder, inindex + 1, inend);
root = newnode;
return newnode;
}