Я пытаюсь построить двоичное дерево из In-order и Pre-order. Каждый узел имеет целочисленное значение для данных. я столкнулся с проблемой при наличии этих массивов:Создание двоичного дерева из Pre и In
Предзаказ: 3,9,2,6,1,1,1,4
В-заказ: 2,9,3,1, 1,1,6,4
Это оригинальное дерево, из которого были извлечены из обходы:
3
/\
9 6
//\
2 1 4
/\
1 1
проблема заключается в том, что функция, которую я написал не может отличить последовательные равные числа.
Это функция в C:
TREE createTreeFromPreAndIn(int pre[], int in[], int n){
TREE res;
res.root = createTreeFromPreAndInHelper(pre, in, n);
return res;
}
TNODE* createTreeFromPreAndInHelper(int pre[], int in[], int n){
int index;
TNODE* rootL, *rootR, *root;
if (n == 0)
return NULL;
else {
index = findIndex(in, n, pre[0]); //returns the index of the first appearance of pre[0] in 'in'
rootL = createTreeFromPreAndInHelper(pre+1, in, index);
rootR = createTreeFromPreAndInHelper(pre+1+index, in+index+1, n-index-1);
root = createNewTreeNode(pre[0], rootL, rootR);
return root;
}
}
Заранее спасибо
Если у вас есть дубликаты, древовидная структура может быть неоднозначной. Вы просто ищете одно решение? –
Да, я ищу конкретное решение. Есть ли способ построить определенное дерево из pre и в заказах, когда есть дубликаты? –
{In, Pre} Порядок - это путь прохождения двоичного дерева после его создания. Откуда вы знаете, что последовательность, в которой вы находитесь или предварительно заказали? –