2010-10-08 144 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