当前位置: 首页 > 知识库问答 >
问题:

Python-平面列表树实现:给定的孩子,获取父?

周和志
2023-03-14

我正在为一棵树创建一个python类,其中每个节点都有一个由“order”给定的子节点(但每个子节点只有一个节点)。我有一个方法,children(self,I),它返回索引I处节点的子节点。我需要实现parent(self,I),它将获得索引I处子节点的父节点。

到目前为止,我有以下信息:

class Tree:
  def __init__(self, order=2, l=[]):
    self._tree = l
    self._order = order

  def children(self, i):
    left = self._tree[(i+1)*self._order-1]
    right = self._tree[(i+1)*self._order]
    return [left, right]

  def parent(self, i):
    if i>len(self._tree):
        return ValueError
    elif i==0:
        return None
    else:
        #get parent of node i

order=2和list[45,2,123,1,8,40,456]表示的示例树如下所示:

      45
    /    \
  2       123
 / \     /   \
1   8   40   456   

我知道可能有一种方法可以逆转我为孩子们使用的方法(self,I),但我不确定如何逆转。

共有1个答案

寇升
2023-03-14

你可以做相反的操作:

else:
    #get parent of node i
    return self._tree[(i-1)//self._order]

请注意,您的实现只适用于二叉树(返回两个子树,而不是n)。请这样更正:

def children(self, i):
    return self._tree[(i*self._order+1):((i+1)*self._order+1)]
 类似资料:
  • 问题内容: 我说有Python清单。我也有一个索引列表,例如。如何获取带有索引的元素的列表? 问题答案: 您可以使用 列表推导 来获取该列表: 这等效于: 输出: 注意: 请记住,这是用于访问特定索引中a元素的表示法。

  • 前面学习了如何用双亲表示法存储普通树,本节再学习一种存储普通树的方法—— 孩子表示法。 孩子表示法存储普通树采用的是 " 顺序表+ 链表" 的组合结构,其存储过程是:从树的根节点开始,使用顺序表依次存储树中各个节点,需要注意的是,与双亲表示法不同,孩子表示法会给各个节点配备一个链表,用于存储各节点的孩子节点位于顺序表中的位置。 如果节点没有孩子节点(叶子节点),则该节点的链表为空链表。 例如,使用

  • 前面讲解了存储普通树的双亲表示法和孩子表示法,本节来讲解最后一种常用方法—— 孩子兄弟表示法。 图 1 普通树示意图 树结构中,位于同一层的节点之间互为兄弟节点。例如,图 1 的普通树中,节点 A、B 和 C 互为兄弟节点,而节点  D、E 和 F 也互为兄弟节点。 孩子兄弟表示法,采用的是链式存储结构,其存储树的实现思想是:从树的根节点开始,依次用链表存储各个节点的孩子节点和兄弟节点。 因此,该

  • 我有一张桌子,可以有相同类型的父母。在Java中,子对象可以到达父对象,但父对象没有子对象列表。 在MySQL中,我能够创建以下查询,给我父级的子级和子级,但我无法将其转换为JPAJava。 如何翻译此查询: 在java语言中,使用Criteria builder和Criteria Query,我已经尝试了以下方法: 但这只给了我直接的孩子,没有给我亚孩子。 谢谢你的帮助。 实体:

  • 本文向大家介绍计算Python列表中包含给定元素的子列表,包括了计算Python列表中包含给定元素的子列表的使用技巧和注意事项,需要的朋友参考一下 给定列表中的元素也可以作为另一个字符串出现在另一个变量中。在本文中,我们将查看给定列表中给定流出现了多少次。 随着范围和镜头 我们使用range和len函数来跟踪列表的长度。然后使用in条件查找字符串在列表中作为元素出现的次数。每当满足条件时,初始化为

  • 问题内容: 我有一个带有分层数据的表,其结构如下所示: 如果我传递节点ID,则希望通过在SQL中遍历其所有父节点来获得最高的节点ID /细节。 我尝试过CTE,但我无法以某种方式获得正确的组合。但是,我将此功能用作函数,但是它太慢了,以至于我不得不发布这个问题。 在上面的示例中,如果我通过6,则我想拥有最高的即1。通过遍历6 => 5 => 3 => 2 => [1](结果) 在此先感谢您的帮助。