阿里在线笔试-路径求和
来源:互联网 发布:lami知乎 编辑:程序博客网 时间:2024/06/17 01:37
前不久阿里内推之后做了阿里的笔试题,半个小时里完全无从下手,最后虽然想出了思路,但时间已到无力回天,只能对着那0%的通过率望洋兴叹,可怜一颗努力刷题的真心。今天看到有同学也准备做阿里的笔试,于是也来凑凑热闹,所幸还是写出了代码,算是弥补了之前的遗憾。分享在此,期待各位讨论研习。(以下内容仅凭记忆,如有偏差,对解题也是没有太大影响的)
1. 问题描述
给定一组输入,每行为一个三位数,输入0或者空行表示结束。这一组输入对应一个二叉树,每一行的三位数对应二叉树中的一个节点,对应规则为:百位表示该节点在二叉树中的层数,十位表示该节点在二叉树该层中的第几个节点,个位数表示该节点的值。限定二叉树的层数最大为4,且每行的三位数递增输入。
求所有叶子节点到根节点的路径所经过节点值的总和。
1.1样例输入
113
211
215
0
1.2样例输出
12
1.3样例解释
根据输入还原二叉树为:
3 / \1 5
叶子节点到根节点有两条路径:1->3和5->3,求和得到:(1+3)+(5+3)=12
2. 思路分析
在所有叶子节点到根节点的路径中,叶子节点只经过一次,非叶子节点的经过次数为其子节点经过次数之和。
3. 编程实现
在如下的代码中,counts数组用于记录每个节点被经过次数,之所以将其大小设置为31,是为了将叶子节点的下一层也补全为完全二叉树,因为是补全的节点,所以经过次数为0,叶子节点的判定就变成:若子节点经过次数之和为0则为叶子节点,置该叶子节点经过次数为1。
import java.util.Objects;import java.util.Scanner;/** * Created by steel on 2017/3/15. */public class Main { public static void main(String[] args){ int[] counts=new int[31]; //记录每个节点被经过的次数 for(int i=0;i<31;i++) counts[i]=0; int[] vector = new int[15]; //最多四层,所以节点不超过15个 Scanner s = new Scanner(System.in); int size=0; for(;size<15;size++){ String str = s.next(); if(str==null || Objects.equals(str, "") || Objects.equals(str, "0")) break; vector[size] = Integer.parseInt(str.trim()); } for(int i=size-1;i>=0;i--){ int index = (vector[i]%100)/10; int floor = vector[i]/100; int cntIndex = (int)Math.pow(2,floor-1)+index;//节点在完全二叉树中的下标 if(counts[cntIndex*2]+counts[cntIndex*2-1]==0)counts[cntIndex]=1;//如果是叶子节点,经过次数为1 else counts[cntIndex] =counts[cntIndex*2]+counts[cntIndex*2-1];//非叶子节点经过次数为其子节点经过次数之和 } int sum=0; for(int i=0;i<size;i++){ int value = vector[i]%10; int index = (vector[i]%100)/10; int floor = vector[i]/100; int cntIndex = (int)Math.pow(2,floor-1)+index; sum+=value*counts[cntIndex];//求和 } System.out.println(sum); }}
0 0
- 阿里在线笔试-路径求和
- 阿里在线笔试有感
- 阿里2015 在线笔试
- 2015阿里秋招在线笔试
- 阿里开发测试工程师在线笔试
- 2015阿里前端实习在线笔试题
- 阿里2015在线笔试,被虐坏了!
- 阿里在线笔试算法工程师附加题
- 2016 阿里 java实习生 在线笔试
- 2015 阿里校招 Web前端开发 在线笔试总结
- 阿里2015在线研发工程师笔试题(部分)
- 阿里在线笔试题---乱序到来顺序输出
- 阿里在线笔试题 折半方法求最接近sum值
- 2015年阿里研发工程师实习在线笔试题
- 2016阿里在线笔试Java研发附加题
- 阿里腾讯2016校招在线笔试有感
- 20170825阿里在线笔试之菜鸟仓库货架格子编号
- 阿里秋招在线笔试两道编程题
- Android编程——Fragment
- 软件开发浅谈
- vue的数据绑定
- CentOS7 升级PHP7
- vue数据交互
- 阿里在线笔试-路径求和
- IntelliJ Idea编译报错:javacTask: 源发行版 1.7 需要目标发行版 1.7
- 关于google maps camera zoom
- selenium配置
- CSS选择器(一)
- HAProxy实战搭建(一)
- svn详解
- levelDB
- android studio 百度地图打包后key验证出错问题解决