题目描述
给定一个非空二叉树, 返回层节点平均值.
输入
第一行给出二叉树的值,值为-1表示这个位置没有节点,第二行给想要求出层数N(N <= 50)
输出
输出平均值并保留两位小数
样例输入
3 9 20 -1 -1 15 7
2
样例输出
14.50
import com.sun.source.tree.Tree;
import java.util.LinkedList;
import java.util.Queue;
import java.util.Scanner;
public class Main {
public static int n,sum;
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
String line = sc.nextLine();
n = sc.nextInt();
TreeNode root = createTree(line);
preorderRecursive(root);
double aver = sum*1.0/n;
System.out.printf("%.2f",aver);
}
private static void preorderRecursive(TreeNode root) {
if(root == null)return;
if(root.level==n){
sum += root.val;
}
preorderRecursive(root.left);
preorderRecursive(root.right);
}
public static TreeNode createTree(String order){
order = order.trim();//将字符串两边的空白字符去掉
if (order.length()==0)return null;
Queue<TreeNode> q = new LinkedList<TreeNode>();
String[] parts = order.split(" ");
String item = parts[0];
int idx = 0;
TreeNode root = new TreeNode(Integer.parseInt(item),1);
q.offer(root);
while(!q.isEmpty()){
if(idx+1>=parts.length)break;
TreeNode top = q.poll();
item = parts[++idx];
item = item.trim();
if(!item.equals("-1")){
TreeNode left = new TreeNode(Integer.parseInt(item),1);
top.left = left;
top.left.level = top.level+1;
q.offer(left);
}
if(idx+1>=parts.length)break;
item = parts[++idx];
item = item.trim();
if(!item.equals("-1")){
TreeNode right = new TreeNode((Integer.parseInt(item)),1);
top.right = right;
top.right.level = top.level+1;
q.offer(right);
}
}
return root;
}
public static class TreeNode{
int val;
int level;
TreeNode left;
TreeNode right;
public TreeNode(int val,int level){
this.val = val;
this.level = level;
}
}
}