如果两棵树具有相同的值节点,则使用set to count

2024-04-19 09:31:25 发布

您现在位置:Python中文网/ 问答频道 /正文

在“def same_child_values”中。我试图比较两棵树,看看另一棵树是否与主树具有相同的值节点树.子项. 在这个例子中,我使用一个集合来比较它们。但是在我的代码中,当树的深度大于1时,我的代码无法正确地将节点添加到集合中。有人能帮我吗?在

class Tree:
      '''Tree ADT; nodes may have any number of children'''

  def __init__(self: 'Tree',
               item: object =None, children: list =None):
    '''Create a node with item and any number of children'''

    self.item = item
    if not children:
      self.children = []
    else:
      self.children = children[:]

  def __repr__(self: 'Tree') -> str:
    '''Return representation of Tree as a string'''

    if self.children:
      return 'Tree({0}, {1})'.format(repr(self.item), repr(self.children))
    else:
      return 'Tree({})'.format(repr(self.item))

  def is_leaf(self: 'Tree') -> bool:
    '''Return True iff this Tree node is a leaf (has no children).'''

    return self.children == []

  def remove_equal(self: 'Tree') -> None:
    '''Remove every child that has the same item as its parent;
    any children of a removed node n become children of an ancestor of n.

    >>> t = Tree(1, [Tree(2, [Tree(1), Tree(2)]), Tree(1)])
    >>> t.remove_equal()
    >>> repr(t)
    'Tree(1, [Tree(2, [Tree(1)])])'
    >>> t = Tree(4, [Tree(4, [Tree(6)])]) 
    >>> t.remove_equal()
    >>> repr(t)
    'Tree(4, [Tree(6)])'
    >>> t = Tree(4, [Tree(4, [Tree(4, [Tree(4)])])])
    >>> t.remove_equal()
    >>> repr(t)
    'Tree(4)'
    >>> t = Tree(4, [Tree(4, [Tree(4, [Tree(6), Tree(7)]), Tree(8)]), Tree(9)])
    >>> t.remove_equal()
    >>> repr(t)
    'Tree(4, [Tree(6), Tree(7), Tree(8), Tree(9)])'
    '''
    new_children = []
    for c in self.children:
      c.remove_equal()
      if not c.item == self.item:
        new_children.append(c)
      else:
        new_children.extend(c.children)
    self.children = new_children



    # Q1: Complete this method (This was the last part of last week's lab.
    # If you did not have a chance to finish it last week, work on it today.)

这是我需要完成的功能

^{pr2}$

这是我的代码:

    for c in self.children:
      a.add(c.item)
      c.same_child_values(other)
    for d in other.children:
      b.add(d.item)
      self.same_child_values(d)
    return b

如果我的“其他”树是t3,我希望在我的集合中看到()

my set() = {8, 9, 6, 7}

如果我的“其他”树是t2,我希望在我的集合()中看到

my set() = {8, 9, 6, 7, 5}

但t2的代码输出是

my set() = {6, 7}

(顺便问一下,python中的set()是否应该在默认情况下对值进行排序?)在

请帮忙。在


Tags: of代码selfchildtreenewreturndef
1条回答
网友
1楼 · 发布于 2024-04-19 09:31:25

这就是你要找的吗?在

def same_child_values(self, other):
        return set([c.item for c in self.children]) == set([c.item for c in other.children])

关键元素在docstring中:“我们只查看直接子级的值,而不是子级的值。”

相关问题 更多 >