Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/swift/19.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Tree 删除/删除SML中的子树_Tree_Sml - Fatal编程技术网

Tree 删除/删除SML中的子树

Tree 删除/删除SML中的子树,tree,sml,Tree,Sml,嘿,我想编写一个函数delete,给定一棵树,我可以删除树中的一个节点,因此它应该返回原始树减去该节点和该节点的子树。 每一个提示都会有所帮助,而thanx会提前: (*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

嘿,我想编写一个函数delete,给定一棵树,我可以删除树中的一个节点,因此它应该返回原始树减去该节点和该节点的子树。 每一个提示都会有所帮助,而thanx会提前:

(*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)));