Вот математический подход к достижению цели очень упрощенным способом:
Используемый язык: Java
`
/ * Алгоритм построения двоичного дерева из заданного Inorder и Preorderобходы.Ниже используется используемая терминология:
i: представляет предоставленный массив порядка
p: представляет предоставленный массив предварительного заказа
beg1: начальный индекс массива порядка
beg2: начальный индекс массива предварительного заказа
end1: конечный индекс массива предварительного заказа
end2: конечный индекс массива предварительного заказа
* /
public staticvoid constructTree (Узел 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);
Если вам нужно более подробное объяснение кода, пожалуйста, укажите это в комментариях.Я был бы рад помочь:).