/ / Usuwanie / usuwanie poddrzewa w SML - drzewo, sml

Usuwanie / usuwanie poddrzew w SML - drzewo, sml

Hej, chcę zaprogramować funkcję, żeby to usunąćbiorąc pod uwagę drzewo, mogę usunąć węzeł w drzewie, aby mógł zwrócić oryginalne drzewo minus węzeł i poddrzewo tego węzła. każda podpowiedź pomaga, a dzięki z góry :)

Odpowiedzi:

0 dla odpowiedzi № 1
(*declaration for tree *)
datatype "a tree
= Empty
| Node of "a tree * "a * "a tree

(* function to compare trees *)
fun eqTree (t, t" : ""a tree) : bool =
case (t, t")
of (Empty, Empty) => true
| (Node(l,x,r), Node(l",x",r")) =>
x = x"       andalso
eqTree(l,l") andalso
eqTree(r,r")
| (Empty, Node _) => false
| (Node _, Empty) => false

(* function to remove all trees t" from t *)
fun rmTree (t, t" : ""a tree) =
case (t, t")
of (Empty, Empty) => Empty
| (Node(l,x,r), Node(l",x",r")) => if x=x" andalso eqTree(l, l") andalso eqTree(r, r") then Empty else Node((rmTree(l,t")), x, rmTree(r,t"))
| (Empty, Node _) => Empty
| (Node a, Empty) => Node a ;

(* an example *)
rmTree(rmTree((Node(Node(Empty,3,Empty), 2, Node(Empty,2,Empty))), (Node(Empty,2,Empty))), (Node(Empty,2,Empty)));