2010-09-29 2 views
0

Эй, я хочу запрограммировать функцию delete, которая дает дерево, я могу удалить узел в дереве, чтобы он возвращал исходное дерево за вычетом узла и поддерева этого узла. каждый подсказка помогает, и спасибо заранееУдаление/удаление поддеревьев в SML

ответ

0
(*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))); 
Смежные вопросы