您的位置:首页 > 编程语言

2017阿里实习生在线编程题

2017-03-17 09:50 489 查看
题目是这样子的:给我们一个数组,比如说[113,215,221];那么这个数组是表示的一个二叉树,是这样表示的,每一个3位数,百位上的值表示这个节点在第几层,十位上的数表示在这一层的第几个位置,个位就这个节点的值了,比如上面的数组表示的二叉树就是:

         3

      /      \

    5       1

然后要求我们求出叶子节点所在路径的节点之和:(3->5)这是一个叶子节点的路径,(3->1)这是另一个叶子节点的路径,就是求(3+5)+(3+1)=12。然后还告诉你最多有4层,我感觉这个条件一下降低了难度。

我的思路是把给定的数组转化成一般的二叉树表示的,然再求叶子的路径之和的,但是发现转换的方法比较差,不知道你们有没有更好的转换方法。

public class Alilibaba {
private static int sum;

public static void main(String[] args) {

//113,215,221 111,222,333,344
int[] a={113};
TreeNode rooTreeNode=CreateBinaryTree(a);

printPaths(rooTreeNode);
System.out.println(Alilibaba.sum);
}

//二叉树结构
private static class TreeNode{
int val;
TreeNode left;
TreeNode right;

public TreeNode(int val) {
this.val=val;
}
}
//创建二叉树
public static TreeNode CreateBinaryTree(int[] data) {
TreeNode root=new TreeNode(0);
int len=data.length;
for (int i = 0; i < len; i++) {
String s=String.valueOf(data[i]);
int first=Character.getNumericValue(s.charAt(0));
int second=Character.getNumericValue(s.charAt(1));
int val=Character.getNumericValue(s.charAt(2));
TreeNode cur=new TreeNode(val);
if(first==1)
root=cur;
else if (first==2) {
if(second==1)
root.left=cur;
else {
root.right=cur;
}

}else if (first==3) {
if(second==1)
root.left.left=cur;
else if (second==2) {
root.left.right=cur;
}else if (second==3) {
root.right.left=cur;
}else {
root.right.right=cur;
}
}else{
if (second==1) {
root.left.left.left=cur;
}else if (second==2) {
root.left.left.right=cur;
}else if (second==3) {
root.left.right.left=cur;
}else if (second==4) {
root.left.right.right=cur;
}else if (second==5) {
root.right.left.left=cur;
}else if (second==6) {
root.right.left.right=cur;
}else if (second==7) {
root.right.right.left=cur;
}else {
root.right.right.right=cur;
}
}
}
return root;
}

//
public static void printTreePaths(TreeNode root,int[] path,int len){
if(root==null)return;
path[len]=root.val;
//System.out.println(path[len]);
len++;
if(root.left==null&&root.right==null){
//System.out.println(Arrays.toString(path));
Alilibaba.sum+=Sum(path);
}else {
printTreePaths(root.left, path, len);
printTreePaths(root.right, path, len);
}
}

public static int printPaths(TreeNode root) {
int[] path=new int[4];
printTreePaths(root, path, 0);
return 1;
}
public static int Sum(int[] a) {
int res=0;
for (int i = 0; i < a.length; i++) {
res+=a[i];
}
return res;
}
}

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: