1. 程式人生 > 其它 >決策樹-獲得葉節點的數目和樹的層數

決策樹-獲得葉節點的數目和樹的層數

現在我們要獲取葉節點和深度,以便後面畫圖

對於葉節點,思路如下

{'no surfacing':{0:'no',1:{'flippers':{0:'no',1:'yes'}}}}
  1. 對於這樣的字典,我們先得到根節點
  2. 然後得到根節點下面的字典
  3. 這個字典可能是空的,對這個字典進行遍歷,如果裡面有字典則遍歷,無字典則進行葉節點+1
  4. 最後返回葉節點個數
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