主题是这样的。 [113、215、221]; 那么,这个数组是显示的二叉树,每三位,百位数的值表示这个节点在第几个层次,十位数表示这个层次的第几个位置,一个位置就是这个节点的值。 例如,上面数组表示的二叉树如下所示。
3
//
5 1
然后,求叶节点所在路径的节点之和。 (3-5)这是一个叶节点的路径,(3-1)这是另一个叶节点的路径,(3.5 ) ) 3.1 )=12。 然后告诉我最多4楼,我觉得这个条件降低了难度。
我的想法是将给定的序列转换为一般的二叉树表示,求出叶子的路径和,但发现转换方法不好。 我不知道你们有没有更好的转换方法。
publicclassalilibaba { privatestaticintsum; publicstaticvoidmain (string [ ] args )/113、215、221111、222、333、344 int [ ] a={ 113 }; treenoderootreenode=createbinarytree (a ); 打印路径(roo treenode ); system.out.print ln (alili Baba.sum; //二叉树结构privatestaticclasstreenode { intval; 树左; 树轻; publictreenode(intval ) {this.val=val; }//二叉树publicstatictreenodecreatebinarytree (int [ ] data ) (treenoderoot=newtreenode ) )0); int len=data.length; for(intI=0; i len; I({strings=string.valueof ) data[I]; int first=character.getnumericvalue (s.charat (0) ); int second=character.getnumericvalue (s.charat (1) ); intval=character.getnumericvalue (s.charat (2) ); treenodecur=newtreenode(val; if(first==1) root=cur; elseif(first==2) if ) second==1) root.left=cur; else {root.right=cur; }elseif(first==3) if ) second==1) root.left.left=cur; elseif(second==2) {root.left.right=cur; }elseif(second==3) {root.right.left=cur; }else {root.right.right=cur; }else{if(second==1) root.left.left=cur; }elseif(second==2) {root.left.left.right=cur; }elseif(second==3) {root.left.right.left=cur; }elseif(second==4) {root.left.right.right=cur; }elseif(second==5) {root.right.left.left=cur; }elseif(second==6) {root.right.left.right=cur; }elseif(second==7) {root.right.right.left=cur; } else { root.right.right.right=cur; } } }返回根; //publicstaticvoidprinttreepaths (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 ); } publicstaticintprintpaths (treenode root ) {int[] path=new int[4]; printtreepaths(root,path,0 ); 返回1; }publicstaticintsum(int[]a ) {int res=0; for(intI=0; i a.length; I({RES=a[I] ); }return res; }