使用Python创建族树

时间:2014-04-18 03:41:13

标签: python tree family-tree

我最近开始使用python,正在使用python构建一个Family树。我的想法是树应该在两边生长,即老一代和年轻一代都可以添加到同一棵树上。

我尝试使用二叉树ADT和N-ary树ADT实现,但这不能很好地工作。任何人都可以建议我最适合构建该家谱的ADT,并指导我如何实现它?

2 个答案:

答案 0 :(得分:2)

经过大量搜索,我发现Graph ADT更适合上述问题。由于一个族在所有方向上都有很大的跨度关系,因此使用图ADT是常规的。

  • 每个节点都可以存储有关某人的详细信息。
  • 节点可以包含父节点链接和一些功能 找到两个节点之间的关系等。
  • 要查找关系,请将父节点视为父节点,并且 父节点的父节点作为祖父母等。
  • 遍历父节点,查找是否有其他子节点, 将它们标记为兄弟姐妹等。

这个想法是这样的,我认为这将有助于解决这个问题!

答案 1 :(得分:1)

如果您查看应用程序“longlines”,GEDCOM文件格式(不是XML版本)和其他家庭树软件,它会创建一个每人和每个家庭单元的唯一记录,然后使用这些记录的ID为家庭成员和儿童创造象征性的参考。

如果您查看此GEDCOM记录,它会识别ID为“I25”的INDIvidual,其为家庭ID F11的子女(FAMC)和F6和F12家庭的配偶(FAMS)。

  0 @I25@ INDI
  1 NAME Thomas Trask /Wetmore/ Sr
  1 SEX M
  1 BIRT
    2 DATE 13 March 1866
    2 PLAC St. Mary's Bay, Digby, Nova Scotia
    2 SOUR Social Security application
  1 NATU
    2 NAME Thomas T. Wetmore
    2 DATE 26 October 1888
    2 PLAC Norwich, New London, Connecticut
    2 AGE 22 years
    2 COUR New London County Court of Common Pleas
    2 SOUR court record from National Archives
  1 OCCU Antiques Dealer
  1 DEAT
    2 NAME Thomas Trask Wetmore
    2 DATE 17 February 1947
    2 PLAC New London, New London, Connecticut
    2 AGE 80 years, 11 months, 4 days
    2 CAUS Heart Attack
    2 SOUR New London Death Records
  1 FAMC @F11@
  1 FAMS @F6@
  1 FAMS @F12@

人类关系远比在基本的树状数据结构中表现得复杂得多。