若有帮助到你,记得点赞、收藏哦!
# -*- coding: utf-8 -*-
"""
Created on Thu Mar 22 20:33:41 2018
@author: Loulch C.C
"""
"""
T
0.5
l / \r
0.49 0.51
l / \ r l / \r
0.490 0.491 0.510 0.511
"""
T={'spi':0,'spv':0.5,'r':{'spi':0,'spvl':0.51,'r':0.511,'l':0.510},'l':{'spi':0,'spv':0.49,'r':0.491,'l':0.490}}
def isTree(obj):
"""
函数说明:测试输入变量是否为一棵树
"""
return (type(obj).__name__=='dict') #判断为字典类型返回true
def getMean(tree):
"""
函数说明:从上往下遍历树直到找到叶节点为止,若找到两个叶节点,计算他们的平均值
返回值:树的平均值(对树进行塌陷式处理)
"""
if isTree(tree['r']):
tree['r'] = getMean(tree['r'])
print(tree['r'])
if isTree(tree['l']):
tree['l'] = getMean(tree['l'])
print(tree['l'])
return (tree['l']+tree['r'])/2.0
print(getMean(T))
"""
输出:
dict
True
float
False
float
False
0.5105
dict
True
float
False
float
False
0.4905
0.5005
递归过程如下:
计算getMean
先判断r0.51,是,递归getMean:接着判断r0.511,否;又接着l0.510,否;说明第一个r的递归到头,计算getMean值。
再判断r0.49,是,递归getMean:接着判断r0.491,否;又接着l0.490,否;说明第一个l的递归到头,计算getMean值。
最后,计算getMean值。
递归本来就是绕来绕去的,不是太好解释,只能解释到这了,新手第一次可能犯难,熟练了很好懂。
"""