現在我們要獲取葉節點和深度,以便后面畫圖
對於葉節點,思路如下
{'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