决策树-获得叶节点的数目和树的层数
现在我们要获取叶节点和深度,以便后面画图
对于叶节点,思路如下
{'no surfacing':{0:'no',1:{'flippers':{0:'no',1:'yes'}}}}
- 对于这样的字典,我们先得到根节点
- 然后得到根节点下面的字典
- 这个字典可能是空的,对这个字典进行遍历,如果里面有字典则遍历,无字典则进行叶节点+1
- 最后返回叶节点个数
def getNumLeafs(myTree):
# 首先得到根节点
# firstNode = myTree.keys()[0]
# 不能直接对keys进行索引,需先转化成list
firstNode = list(myTree.keys())[0]
# print(firstNode)
# 得到no surfacing
# 获得根节点对应的字典
secondDict = myTree[firstNode]
# 对这个字典进行遍历,如果里面还有字典那就继续遍历
numLeafs = 0
for key in secondDict.keys():
if type(secondDict[key]) == dict:
numLeafs += getNumLeafs(secondDict[key])
else:
# 如果没有了那么叶节点数量 + 1
numLeafs += 1
return numLeafs
myTree = {'no surfacing':{0:'no',1:{'flippers':{0:'no',1:'yes'}}}}
print(getNumLeafs(myTree))
3
def getTreeDepth(myTree):
# 首先得到根节点
# firstNode = myTree.keys()[0]
# 不能直接对keys进行索引,需先转化成list
firstNode = list(myTree.keys())[0]
# print(firstNode)
# 得到no surfacing
# 获得根节点对应的字典
secondDict = myTree[firstNode]
# 对这个字典进行遍历,如果里面还有字典那就继续遍历
# 树的深度要去掉根节点
maxDepth = 0
for key in secondDict.keys():
if type(secondDict[key]) == dict:
tempDeth = 1 + getTreeDepth(secondDict[key])
else:
tempDeth = 1
if tempDeth > maxDepth:
maxDepth = tempDeth
return maxDepth
myTree = {'no surfacing':{0:'no',1:{'flippers':{0:'no',1:'yes'}}}}
print(getTreeDepth(myTree))
2