Вот математический подход к достижению вещи очень упрощенным способом:
Используемый язык: Java
`
/ *
Алгоритм построения двоичного дерева по заданным обходам Inorder и Preorder.
Ниже приводится используемая терминология:
i: представляет предоставленный массив заказов
p: представляет предоставленный массив предзаказа
beg1: начальный индекс массива inorder
beg2: начальный индекс массива предзаказа
end1: конечный индекс массива inorder
end2: конечный индекс массива предзаказа
* /
public static void constructTree (Node root, int [] i, int [] p, int beg1, int end1, int beg2, int end2)
{
if(beg1==end1 && beg2 == end2)
{
root.data = i[beg1];
}
else if(beg1<=end1 && beg2<=end2)
{
root.data = p[beg2];
int mid = search(i, (int) root.data);
root.left=new Node();
root.right=new Node();
constructTree(root.left, i, p, beg1, mid-1, beg2+1, beg2+mid-beg1);
System.out.println("Printing root left : " + root.left.data);
constructTree(root.right, i, p, mid+1, end1, beg2+1+mid-beg1, end2);
System.out.println("Printing root left : " + root.right.data);
}
}
`
Вам нужно вызвать функцию с помощью следующего кода:
int[] i ={4,8,7,9,2,5,1,6,19,3,18,10}; //Inorder
int[] p ={1,2,4,7,8,9,5,3,6,19,10,18}; //Preorder
Node root1=new Node();
constructTree(root1, i, p, 0, i.length-1, 0, p.length-1);
Если вам нужно более подробное объяснение кода, пожалуйста, укажите это в комментариях. Я был бы рад помочь:).