1 package job.huawei;
2
3 import java.util.Scanner;
4
5 public class TreeHigh {
6
7 /**
8 * 输入字符串如a1b2c2d3e3f3g4构成一颗二叉树数字表示前一个字符所在的层,最多不超过9层
9 * 求指定节点的深度
10 */
11 public static void main(String[] args) {
12 // TODO Auto-generated method stub
13 Scanner cin=new Scanner(System.in);
14 String str=cin.next();
15 String findChar=cin.next();
16 cin.close();
17 char tree[]=new char[512];
18 createTree(str,tree);
19 for(int i=0;i<findChar.length();i++){
20 System.out.print(getNodeHigh(tree,str,findChar.charAt(i))+" ");
21 }
22 }
23 /**
24 * 根据输入的字符串,顺序存储树
25 * @param str
26 * @param tree
27 */
28 public static void createTree(String str,char tree[]){
29 int k=0,count=0,j=0;
30 for(int i=1;i<str.length();i+=2){
31 j=Integer.parseInt(String.valueOf(str.charAt(i)));//取某节点所在层
32
33 if(i>1)
34 {
35 count=str.charAt(i)!=str.charAt(i-2)?0:count+1;//判断是否在同一层,同一层则count+1,否则count=0
36
37 }
38 k=(int)Math.pow(2, j-1)+count;////计算节点的存储位置
39
40 tree[k]=str.charAt(i-1);
41 }
42 }
43 /**
44 * 求指定节点在树中的深度
45 * @param tree
46 * @param str
47 * @param x
48 * @return
49 */
50 public static int getNodeHigh(char tree[],String str,char x) {
51 int index=str.indexOf(String.valueOf(x));//判断该字符是否在树中,不在则直接返回
52
53 if(index<0) return 0;
54
55 int d=Integer.parseInt(String.valueOf(str.charAt(index+1))),level=0;//获取节点所在层次
56
57 while(2*d<tree.length&&tree[2*d]!=tree[0]){
58 level++;
59 d=2*d;
60 }
61 return level+1;
62 }
63 }