Нашел этот вопрос в интервью. Представление обхода двоичного дерева. Распечатайте все возможные бинарные деревья из него.
Первоначальная мысль:
Если говорят, что в массиве всего 2 элемента. Скажем 2,1. Тогда два возможных дерева:
2
\
1
1
/
2
Если 3 элемента Say, 2,1,4. Тогда у нас есть 5 возможных деревьев.
2 1 4 2 4
\ / \ / \ /
1 2 4 1 4 2
\ / / \
4 2 1 1
Итак, в основном, если у нас есть n элементов, то у нас есть n-1 ветки (childs,/or). Мы можем расположить эти n-1 ветки в любом порядке. При n = 3, n-1 = 2. Итак, у нас есть 2 ветки. Мы можем организовать две ветки следующими способами:
/ \ \ / /\
/ \ / \
Исходная попытка:
struct node *findTree(int *A,int l,int h)
{
node *root = NULL;
if(h < l)
return NULL;
for(int i=l;i<h;i++)
{
root = newNode(A[i]);
root->left = findTree(A,l,i-1);
root->right = findTree(A,i+1,h);
printTree(root);
cout<<endl;
}
}