Я нахожу пример сборки из preorder, как насчет того, как построить двоичное дерево из сообщения ?Как построить двоичное дерево из почтового заказа
я редактировать следующим образом, это правильно
type BinaryTree =
| Nil
| Node of NodeType * BinaryTree * BinaryTree
let rec buildBSTfromPostOrder (l:NodeType list) =
match l with
| [] -> Nil
| [a] -> Node(a, Nil, Nil)
| h::t ->
let b = Node(h, buildBSTfromPostOrder(t), buildBSTfromPostOrder(t))
let smaller =
t
|> Seq.takeWhile (fun n -> n < h)
|> Seq.toList
let bigger =
t
|> Seq.skipWhile (fun n -> n < h)
|> Seq.toList
b
let input = [10; 1; 2; 2; 1; 50]
Ваш код подразумевает есть еще одна деталь, которая не упоминается в этом вопросе. Кажется, это пост-порядок двоичного * поиска * дерева - это значит, что вы знаете, что уже происходит в обходном порядке. Это действительно так? – amit
@amit, я думаю, что BST в 'buildBSTfromPostOrder' подразумевает, что это двоичное дерево поиска :) – MisterMetaphor
Вы не используете' small' и 'large', знаете ли вы, куда они должны идти? –