Учитывая прохождение предварительного заказа BST. Я должен построить BST.Могу ли я построить BST из прохождения предварительного заказа, просто создав пустой BST и вставив элементы в обход предварительного заказа один за другим, начиная с первого элемента и заканчивая последним элементом, в пустой BST?
Например,рассмотрим следующий BST: -
10
/ \
5 40
/ \ \
1 7 50
Его обход по предварительному заказу:
10 5 1 7 40 50
Путем создания пустого BSTи затем вставка элементов в обход предварительного заказа один за другим, начиная с первого элемента, дает мне точное BST, объясненное следующим образом:
(empty tree)
вставьте первый элемент обхода предварительного заказа: 10
10
вставьте второй элемент обхода предварительного заказа: 5
10
/
5
аналогично,
10
/
5
/
1
10
/
5
/ \
1 7
10
/ \
5 40
/ \
1 7
10
/ \
5 40
/ \ \
1 7 50
Здесь я построил точный BST, просто вставив элементы вПредзаказ обход по одному в пустое дерево.Будет ли этот алгоритм работать во всех случаях? Есть ли случаи, когда этот алгоритм не будет работать?
void insertIntoTree(struct* Node,int val)
{
if(Node == NULL)
{
Node = createNewNode(val);
return;
}
if(val < Node->val)
insertIntoTree(Node->left,val);
else
insertIntoTree(Node->right,val);
}
int main()
{
int preorderlist[] = { 10,5,1,7,40,50};
for(int i=0;i <= preorderlist.size();i++)
{
insertIntoTree(TreeRoot,preorderlist[i]);
}
}