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 }