我試圖在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
您能提供一個輸入數據的例子嗎? – Krets 2013-05-04 01:11:25
由於我無法打印樹,所以很難做到這一點;)。但是如果你的意思是用來產生這個的算法,那麼不是真的......它本質上是ID3,它試圖將事物分類爲「正確的」或「錯誤的」 – varatis 2013-05-04 01:12:54
在第二部分的第三行是你乘以字符串 – aaronman 2013-05-04 01:13:29