2018届实习-阿里巴巴内推编程题(简单、清晰)

对于一个由一位十进制整数构成的二叉树,如果深度不超过4,可以用一个三位十进制整数构成的数组表示,具体规则如下:

1、百位数表示树的层次L,1<=L<=4;十位数表示在该层次中的位置P,1<=P<=8;个位数表示数值V。

2、数组里,L一定是单增的,也就是说后一个数的L大于等于前一个数的L;

3、对于同一个L,P也是单增的,就是说在L不变的情况下,后一个数的P大于等于前一个数的P。

例如:[ 113, 215, 221 ]

  3

/    \

5 1

现在要求这个树所有到叶子节点的路径和,对于例子中,路径和为 (3+5)+(3+1)=12

解决思路:
1. 树 存储(这里用采用数组,通过节点编号来建立亲子关系,如节点i的左节点为arr[2*i],右节点为arr[2*i+1])
2. 叶子节点判断
3. 叶子路径求和

附上代码:
作者网站: http://www.lazymore.com(click is a support)

package alibaba.interview;

import java.util.Scanner;

public class Solution1 {

    public static void main(String[] args) {
        int res = resolve();
        System.out.println(res);
    }

    static int resolve() {
        Scanner in = new Scanner(System.in);
        int num  = 0;
        int[] arr = new int[16];    // 用数组存储树,丛1开始,4层最多15个节点

        // 初始化树
        for (int i = 0; i < arr.length; i++) {
            arr[i] = -1;
        }

        // 获取输入
        do {
            num = Integer.parseInt(in.nextLine().trim());
            if (num == 0) break;

            int a = num / 100;
            int b = num / 10 % 10;
            int c = num % 10;

            int pos = (int)(Math.pow(2, a - 1)) + b - 1;
            arr[pos] = c;

        } while (true);

        // 找到叶节点,对路径求和
        int sum = 0;
        for (int i = 1; i < arr.length; i++) {
            boolean isleaf = false;
            if ((i >= 8 && arr[i] != -1) || (i < 8 && arr[i] != -1 && arr[2 * i] == -1 && arr[2 * i + 1] == -1)) {
                isleaf = true;
            }
            int k = i;
            if (isleaf) {
                while (k >= 1) {
                    sum += arr[k];
                    k /= 2;
                }
            }
        }


        return sum;
    }
}
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值