1

我正在尝试在 Python 中递归地打印一棵树。出于某种原因,缩进不起作用(也许我此时太累了,看不到明显的缺陷)。这是我正在使用的结构/类定义:

class Tree(object):
  def __init__(self, data):
    self.data = data
    self.branches = []

class Branch(object):
  def __init__(self, value):
    self.label = value
    self.node = None

如您所见,每棵树都有分支,它们有一个标签并指向另一棵树(这就是node您在那里看到的值)。这是我尝试打印树的方式:

  def __str__(self):
    return self.tree_string(0)

  def tree_string(self, indent):
    indentation = indent * " "
    result = indentation + str(self.data) + "\n";
    for branch in self.branches:
      result += indentation + branch.label + ": \n" + branch.node.tree_string(indent + 2)
    return result

这给了我:

4
Somewhat: 
  Yes
Fuller: 
  3
Correct: 
  8
Caribbean: 
  2
Wrong: 
  Wrong
Correct: 
  Correct

Italian: 
  Wrong
Burger: 
  Correct

Wrong: 
  Wrong

Nothing: 
  Wrong

什么时候应该给我类似的东西

4
Somewhat: 
  Correct
Fuller: 
  3
  Correct: 
    8
    Caribbean: 
      2
      Wrong: 
        Wrong
      Correct: 
        Correct
    Italian: 
      Wrong
    Burger: 
     Correct
  Wrong: 
    Wrong
Nothing: 
  Wrong

是什么导致我的代码有这些额外的换行符并且没有正确的缩进?

更新

很确定数据没问题。这是一个修改后的版本,显示它没问题:

  def tree_string(self, indent):
    indentation = indent * " "
    result = str(self.data);
    if len(self.branches) > 0:
      result += "["
      for branch in self.branches:
        result += branch.label + ":" + branch.node.tree_string(indent + 2) + " "
      result += "]"
    return result

..它给出了输出

4[Somewhat:Correct Fuller:3[Correct:8[Caribbean:2[No:No Correct:Correct ] Italian:Wrong Burger:Correct ] Wrong:Wrong ] Nothing:Wrong ]

但是,由于某种原因,缩进值始终为 0 或 2。

4

1 回答 1

3

看起来它应该对我有用:

class Tree(object):
  def __init__(self, data):
    self.data = data
    self.branches = []
  def __str__(self):
    return self.tree_string(0)

  def tree_string(self, indent):
    indentation = indent * " "
    result = indentation + str(self.data) + "\n";
    for branch in self.branches:
      result += indentation + branch.label + ": \n" + branch.node.tree_string(indent + 2)
    return result

class Branch(object):
  def __init__(self, value):
    self.label = value
    self.node = None

tree = Tree(4)
b1 = Branch('Somewhat')
b1.node = Tree('Yes')
b2 = Branch('Fuller')
b2.node = Tree(3)
tree.branches = [b1, b2]
b3 = Branch('Correct')
b3.node = Tree(8)
b2.node.branches = [b3]
print(tree)

产量

4
Somewhat: 
  Yes
Fuller: 
  3
  Correct: 
    8
于 2013-05-04T01:20:36.970 回答