【问题标题】:Binary tree inorder traversal in PythonPython中的二叉树中序遍历
【发布时间】:2016-05-08 00:52:10
【问题描述】:

我认为我没有正确遍历它并且当它需要返回一个新列表时它返回空。我已经被困了一段时间,仍然需要做所有其他的遍历。将为所需的输出提供单元测试,但我的单元测试可能是错误的。

def inorder(self):

    print("in INOrDER is entered")
    temp = [None]


    if self.__left:
        temp = temp.append(self.__left)
        return self.__left.inorder() 
    elif self.__right: 
        temp = temp.append(self.__right)
        return self.__right.inorder() 
    return temp


def test_inorder(self):
    bt = family_tree()
    bt.add(20, "melanie")
    bt.add(10, "edwin")
    bt.add(30, "junior")
    bt.add(25, "dora")
    bt.add(35, "kate")
    x = bt.inorder()

    expected = '''(10, 'edwin'),(20, 'melanie'),(25, 'dora'),(30, 'junior'),(35, 'kate')'''
    self.assertEquals(str(x), expected)
    t = family_tree(bt)
    self.assertEquals(str(t), expected)

【问题讨论】:

标签: python data-structures binary-tree inorder


【解决方案1】:

您的实现中有两个问题:

temp = [None]

上面的语句创建了一个带有None项的列表:

x = len(temp) # x value will be 1

第二个问题是你的方法附加逻辑;您返回值而不是附加它们。

这是基于您的代码的实现:

def inorder(self):
    result = []
    if self.__left:
        result += self.__left.inorder()

    result.append(self.__value)

    if self.__right:
        result += self.__right.inorder()

    return result

【讨论】:

    【解决方案2】:

    按顺序遍历需要下降到两个子树(如果存在),并访问其间的根;您的代码在遍历子树后返回,跳过另一个子树根。

    【讨论】:

      猜你喜欢
      • 2017-05-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-02-25
      相关资源
      最近更新 更多