题目的链接在这里:https://leetcode-cn.com/problems/average-of-levels-in-binary-tree/
题目大意
给定一个非空二叉树, 返回一个由每层节点平均值组成的数组。一、示意图
二、解题思路
层次遍历
层次遍历
代码如下:
/**
* Definition for a binary tree node.
* public class TreeNode {
* int val;
* TreeNode left;
* TreeNode right;
* TreeNode() {}
* TreeNode(int val) { this.val = val; }
* TreeNode(int val, TreeNode left, TreeNode right) {
* this.val = val;
* this.left = left;
* this.right = right;
* }
* }
*/
class Solution {
public List<Double> averageOfLevels(TreeNode root) {
//最基础的层次遍历
List<Double> re=new ArrayList<Double>();
//需要有一个栈的存在
Queue<TreeNode> queue=new LinkedList<TreeNode>();
//先把第一个进栈
queue.add(root);
//应该是一旦栈空了 那就可以放入新的了
//根据提示 那就使用队列比较好 而且不需要从队列是否为空来控制 用队列当前的长度来控制
double result=0;
//那就还是使用while 非空来一直判断
while (!queue.isEmpty()){
int len=queue.size();
//这个是当前层次的长度
for(int i=0;i<len;i++){
//这个循环的意思是 在当前层次进行的判断
TreeNode temp=queue.poll();
result+=temp.val;
//然后判断这个点的左右子树存不存在
if(temp.left!=null){
queue.add(temp.left);
}
if(temp.right!=null)
queue.add(temp.right);
}
//若干次循环之后 当前层的值就都更新完全了 然后把对应的值放入结果中 并且更新即可
re.add(result/len);
//这里进行还原
result=0;
}
return re;
}
}