主题:在二进制树中平均级别
Given a non-empty二进制树,returntheaveragevalueofthenodesoneachlevelintheformofanarray
Example:
Input:
3
/
9 20
/
15 7
output : [ 3,14.5,11 ]
扩展:
theaveragevalueofnodesonlevel0is 3,on level 1 is 14.5,Ando nlevel2is 11.hence return [ 3,14.5,11 ]。
BFS解决:
解法在计算均值的地方太满了,可以选择性地忽略
#-* -编码: utf-8-* -
# 2017/7/17
#定义for a binary tree node。
类树(对象) :
def __init__(self,x ) :
self.val=x
self.left=None
self.right=None
类解决方案(对象) :
@静态方法
defaverage_of_levels(root ) :
''''
: param root :树节点
:return: List[float]
''''
s,Q=list (,list ) )
q.append ()、root ) )
while Q:
级别,u=Q[0] #1
Q=Q[1:] #2
s.append((level,u.val ) )
if u.left:
q.append((level1,u.left ) )
if u.right:
q.append((level1,u.right ) )
#打印级别,u.val
#打印s
fromcollectionsimportdefaultdict
result=默认光盘(列表)
for each in S:
level,val=each[0],each[1]
result[level].append(val )
#打印结果
re=[0foriinrange (max (result.keys ) )1) ]
for i,jinenumerate(re ) :
re [ I ]=浮动(sum (result ) I ) )/len (result ) I ) ) ) ) ) 0
返回re
根=趋势科技(3) )。
根. left=趋势科技(9) )。
根. left.left=treenode (3) )。
根. left.right=treenode (6) )。
root.right=treenode(20 ) )。
根. right.left=treenode (15 ) )。
root.right.right=treenode(7) )。
solution.average _ of _ levels (根)
后记:
1 .该主题洞主要位于二叉树各层节点数量不定,容易忽视。
2 .虽然主题难度很低,但这个主题对个人来说有很多成果。 主要是在算法设计问题上的理论应用吧。 因为在面对一个问题时,我总是埋头于暴力猜测,往往忽略了解决问题中最重要的一步——“前期思路分析”。
3 .问题不难。 简单来说,可以采用算法设计的归纳方法进行处理。 这个问题解决问题主要是两个步骤:“遍历图”和“平均值计算”。 把一个复杂的问题分解成多个简单的问题,然后合并,然后得出结论,这就是归简法的应用吧。 正规军的道路往往侧重于培养解决问题的能力,而不是解决问题
4 .虽然计算代码中平均值的过程已经填满,但图中的遍历还是有值得说的地方。 那是q这个队列。
一二行中的
u=Q[0];
Q=Q[1:]
改为#
u=Q.pop ()
会怎么样?