题目分析:二叉树的层级遍历的数组,先把数组还原成二叉树,首先需要了解一个规则,下一层是上一层节点个数的两倍。那就很清楚了。退出循环条件为,剩下的节点个数少于上一层的两倍。
在实现上述思路过程中,想到了一个很简单的思路,既然我们是求前几层的和,那我们直接用求和公式,算出层数,就好了。然后通过层数求出该层有几个叶子节点。
<script>
var root=[1,2,3,4,5,null,6,7,null,null,null,null,8];
var deepestLeavesSum = function(root) {
var result = findLastLayer(root);
return result;
function findLastLayer(root){
var temp = Math.pow(2,parseInt(Math.log2(root.length+1)))+1;
var result=0;
for(var i=temp-1;i<root.length;i++){
if(root[i]!=null){
result+=root[i];
}
}
return result;
}
};
console.log(deepestLeavesSum(root));
</script>
实现了后发现,这道题的样例是一颗二叉树,然后就想到要三步:
1、首先要搞清楚这棵树的最深层为第几层。
2、找到最深层的叶子节点。
3、求和。
然后我就用python来写了。
class Solution(object):
sum=0 #记录总和
maxLayer = 0 #记录最深层为第几层
def deepestLeavesSum(self, root):
"""
:type root: TreeNode
:rtype: int
"""
p=root;
self.traMax(root,0)
self.traverse(root,1)
return self.sum
def traMax(self,Node,layer): #找最深层为第几层
if Node==None:
if layer>self.maxLayer:
self.maxLayer=layer;
else:
self.traMax(Node.left,layer+1);
self.traMax(Node.right, layer + 1);
def traverse(self,Node,layer): #找到最后一层并求和
if Node==None:
return 0;
elif layer==self.maxLayer:
self.sum+=Node.val;
else:
self.traverse(Node.left,layer+1);
self.traverse(Node.right, layer + 1);