2010-10-08 98 views
3

我有一个任务,我不知道该怎么做。我有一棵树,他们的名字,出生和死亡年。在这里考虑家谱。我有一堆数据类型来照顾年龄,名称,树本身等,然后我有一群人和一棵树。删除和添加节点到树

的数据类型为:

datatype year = Year of int | UnkYear | Irrelevant 
datatype name = Name of string | UnkName 
datatype sex  = Man | Woman | UnkSex 
datatype person = Person of name * sex * year * year 
datatype parents = Dad | Mom 
datatype tree = Unspec | Info of person * tree * tree 

首先我需要能够移除这个位置,一切人就“下” - 因此删除“妈妈”将删除的妈妈和她的父母,祖父母等。如果调用的位置中没有人,则该函数应返回树。它应该是这样的: 删除:树*父母名单 - >树和电话是删除(t,pos)

这是我的,但它不是很正确。我被告知我可以用4行来完成。

fun replace (Info(n,mf,ft) , Mom::[]) = Info(n,replace(mf,[]),Unspec) 
    | replace (Info(n,mf,ft) , Dad::[]) = Info(n,Unspec,replace(ft,[])) 
    | replace (Info(n,mf,ft) , [])  = Info(n,mf,ft) 
    | replace (Info(n,mf,ft) , Mom::xs) = Info(n,replace(mf,[]),replace(ft,xs)) 
    | replace (Info(n,mf,ft) , Dad::xs) = Info(n,replace(mf,xs),replace(ft,[])) 
    | replace (Unspec , x::xs)   = Unspec 
    | replace (Unspec , [])    = Unspec; 

一个想法,我有:

fun replace (Info(n,mf,ft) , Mom::xs) = Info(n,mf,replace(ft,xs)) 
    | replace (Info(n,mf,ft) , Dad::xs) = Info(n,replace(mf,xs),ft) 
    | replace (Info(n,mf,ft) , [])  = Info(n,mf,ft) 
    | replace (Unspec , xs)    = Unspec; 

但它是不正确的。我该怎么办?

我也应该能够将一个人p插入位置pos的树t中 - 如果该位置不存在,它应该返回树。 插入:树*父母名单*人 - >树

我只是不能让我的头,我希望有人能够帮助我。我希望我已经清楚了(我知道这很长)。

+0

我已经修复它了,我希望我能把它弄好。 n是树的根,它是人的类型。信息(n,mf,ft),人*树*树的信息 – GeorgeWChubby 2010-10-09 09:18:33

+0

任何人都有任何指标来取代BST元素? – CyprUS 2015-11-01 21:49:40

回答

2

(重新显示我的以前的答案没有幸免于数据库崩溃)。

您正在考虑列表的头部以决定是分支进入母亲还是父亲子树。这是对的。然后使用列表的尾部作为路径的其余部分。这也是正确的。但是,当列表为空时(即您已到达目的地),您可以这样做:

| remove (Info(n,mf,ft) , [])  = Info(n,mf,ft) 

换句话说:Nothing。如果将其更改为:

| remove (Info(n,mf,ft) , [])  = Unspec 

它会工作打算,免去您的路径导致你与UNSPEC树的节点。

+0

非常感谢!你知道我如何将一个人插入树中吗(或者你能否向正确的方向推动我)? – GeorgeWChubby 2010-10-09 15:28:32

+0

@George:你应该把这个问题作为一个单独的问题来提供更多的信息,包括:你想在哪里插入新人?根据像删除路径?如果是这样的话:目前在那个位置的人会发生什么?或者你只想让一个人插入当前Unspec的位置?最重要的是:到目前为止你有什么? – sepp2k 2010-10-09 15:36:00

+0

好点,谢谢。我会自己做更多的工作,如果一切都失败了,我会回到这里:) – GeorgeWChubby 2010-10-09 15:40:13