算法实践篇-2的n次方方正相乘普通方法,递归方法以及strassen方法
2014-03-17 19:11
323 查看
package com.sort.divid; /** * 矩阵乘法 * @author Administrator *a,b为n*n矩阵,并且n=2^n */ public class StrassenMatrixMultipliy { public static void main(String[] args) { int[][]a=new int[][]{ {1,2,3,4}, {5,6,7,8}, {9,10,11,12}, {13,14,15,16} }; int[][]b=new int[][]{ {1,3,5,7}, {2,4,6,8}, {11,13,15,17}, {12,14,16,18} }; int[][] result1=ordernaryMultipy(a,b); System.out.println("resule1:ordernaryMultipy"); for(int i=0;i<a.length;i++){ for(int j=0;j<a.length;j++){ System.out.print(result1[i][j]+" "); } System.out.println(); } System.out.println("resule2:recruciveMultipy"); int[][]result2=recruciveMultipy(a,b ,new int[][]{ {0,0}, {0,a.length-1}, {a.length-1,0}, {a.length-1,a.length-1} },new int[][]{ {0,0}, {0,a.length-1}, {a.length-1,0}, {a.length-1,a.length-1} },a.length); for(int i=0;i<a.length;i++){ for(int j=0;j<a.length;j++){ System.out.print(result2[i][j]+" "); } System.out.println(); } System.out.println("resule3:strassenMultipy"); } private static int[][] strassenMultipy(int[][]a,int[][]b){ int [][] c=new int[a.length][a.length]; return c; } private static int[][] ordernaryMultipy(int [][] a,int[][]b){ int n=a.length; int [][] c=new int ; for(int i=0;i<n;i++){ for(int j=0;j<n;j++){ for(int k=0;k<n;k++){ c[i][k]+=a[i][j]*b[j][k]; } } } return c; } private static int[][] recruciveMultipy(int [][]a,int[][]b,int[][] indexA,int[][]indexB,int size){ int [][] c=new int[size][size]; if(indexA[0][0]-indexA[3][0]==0){ c[indexA[0][0]][indexB[0][1]]=a[indexA[0][0]][indexA[0][1]]*b[indexB[0][0]][indexB[0][1]]; }else{ int n=size; int[][] indexA11=new int[4][2]; indexA11[0][0]=indexA[0][0]; indexA11[0][1]=indexA[0][1]; indexA11[1][0]=indexA[1][0]; indexA11[1][1]=(indexA[1][1]+indexA[0][1])/2; indexA11[2][0]=(indexA[2][0]+indexA[0][0])/2; indexA11[2][1]=indexA[2][1]; indexA11[3][0]=(indexA[3][0]+indexA[0][0])/2; indexA11[3][1]=(indexA[3][1]+indexA[0][1])/2; int [][]indexA12=new int[4][2]; indexA12[0][0]=indexA[0][0]; indexA12[0][1]=(indexA[1][1]+indexA[0][1])/2+1; indexA12[1][0]=indexA[1][0]; indexA12[1][1]=indexA[1][1]; indexA12[2][0]=(indexA[3][0]+indexA[0][0])/2; indexA12[2][1]=(indexA[3][1]+indexA[0][1])/2+1; indexA12[3][0]=(indexA[3][0]+indexA[0][0])/2; indexA12[3][1]=indexA[3][1]; int [][] indexA21=new int[4][2]; indexA21[0][0]=(indexA[2][0]+indexA[0][0])/2+1; indexA21[0][1]=indexA[0][1]; indexA21[1][0]=(indexA[3][0]+indexA[0][0])/2+1; indexA21[1][1]=(indexA[3][1]+indexA[0][0])/2; indexA21[2][0]=indexA[2][0]; indexA21[2][1]=indexA[2][1]; indexA21[3][0]=indexA[3][0]; indexA21[3][1]=(indexA[3][1]+indexA[0][0])/2; int[][]indexA22=new int[4][2]; indexA22[0][0]=(indexA[3][0]+indexA[0][0])/2+1; indexA22[0][1]=(indexA[3][1]+indexA[0][1])/2+1; indexA22[1][0]=(indexA[3][0]+indexA[0][0])/2+1; indexA22[1][1]=indexA[3][1]; indexA22[2][0]=indexA[3][0]; indexA22[2][1]=(indexA[3][1]+indexA[0][1])/2+1; indexA22[3][0]=indexA[3][0]; indexA22[3][1]=indexA[3][1]; int[][]indexB11=new int[4][2]; indexB11[0][0]=indexB[0][0]; indexB11[0][1]=indexB[0][1]; indexB11[1][0]=indexB[1][0]; indexB11[1][1]=(indexB[1][1]+indexB[0][1])/2; indexB11[2][0]=(indexB[2][0]+indexB[0][0])/2; indexB11[2][1]=indexB[2][1]; indexB11[3][0]=(indexB[3][0]+indexB[0][0])/2; indexB11[3][1]=(indexB[3][1]+indexB[0][1])/2; int[][]indexB12=new int[4][2]; indexB12[0][0]=indexB[0][0]; indexB12[0][1]=(indexB[1][1]+indexB[0][1])/2+1; indexB12[1][0]=indexB[1][0]; indexB12[1][1]=indexB[1][1]; indexB12[2][0]=(indexB[3][0]+indexB[0][0])/2; indexB12[2][1]=(indexB[3][1]+indexB[0][1])/2+1; indexB12[3][0]=(indexB[3][0]+indexB[0][0])/2; indexB12[3][1]=indexB[3][1]; int[][]indexB21=new int[4][2]; indexB21[0][0]=(indexB[2][0]+indexB[0][0])/2+1; indexB21[0][1]=indexB[0][1]; indexB21[1][0]=(indexB[3][0]+indexB[0][0])/2+1; indexB21[1][1]=(indexB[3][1]+indexB[0][0])/2; indexB21[2][0]=indexB[2][0]; indexB21[2][1]=indexB[2][1]; indexB21[3][0]=indexB[3][0]; indexB21[3][1]=(indexB[3][1]+indexB[0][0])/2; int[][]indexB22=new int[4][2]; indexB22[0][0]=(indexB[3][0]+indexB[0][0])/2+1; indexB22[0][1]=(indexB[3][1]+indexB[0][1])/2+1; indexB22[1][0]=(indexB[3][0]+indexB[0][0])/2+1; indexB22[1][1]=indexB[3][1]; indexB22[2][0]=indexB[3][0]; indexB22[2][1]=(indexB[3][1]+indexB[0][1])/2+1; indexB22[3][0]=indexB[3][0]; indexB22[3][1]=indexB[3][1]; int [][]c11x=recruciveMultipy(a,b,indexA11,indexB11,size); int [][]c11y=recruciveMultipy(a,b,indexA12,indexB21,size); for(int i=0;i<n;i++){ for(int j=0;j<n;j++){ c[i][j]+=c11x[i][j]+c11y[i][j]; } } int[][]c12x=recruciveMultipy(a,b,indexA11,indexB12,size); int[][]c12y=recruciveMultipy(a,b,indexA12,indexB22,size); for(int i=0;i<n;i++){ for(int j=0;j<n;j++){ c[i][j]+=c12x[i][j]+c12y[i][j]; } } int[][]c21x=recruciveMultipy(a,b,indexA21,indexB11,size); int[][]c21y=recruciveMultipy(a,b,indexA22,indexB21,size); for(int i=0;i<n;i++){ for(int j=0;j<n;j++){ c[i][j]+=c21x[i][j]+c21y[i][j]; } } int[][]c22x=recruciveMultipy(a,b,indexA21,indexB12,size); int[][]c22y=recruciveMultipy(a,b,indexA22,indexB22,size); for(int i=0;i<n;i++){ for(int j=0;j<n;j++){ c[i][j]+=c22x[i][j]+c22y[i][j]; } } } return c; } }
Strassen方法待续。
package com.sort.divid; /** * 矩阵乘法 * @author Administrator *a,b为n*n矩阵,并且n=2^n */ public class StrassenMatrixMultipliy { public static void main(String[] args) { int[][]a=new int[][]{ {1,2,3,4}, {5,6,7,8}, {9,10,11,12}, {13,14,15,16} }; int[][]b=new int[][]{ {1,3,5,7}, {2,4,6,8}, {11,13,15,17}, {12,14,16,18} }; int[][] result1=ordernaryMultipy(a,b); System.out.println("resule1:ordernaryMultipy"); for(int i=0;i<a.length;i++){ for(int j=0;j<a.length;j++){ System.out.print(result1[i][j]+" "); } System.out.println(); } System.out.println("resule2:recruciveMultipy"); int[][]result2=recruciveMultipy(a,b ,new int[][]{ {0,0}, {0,a.length-1}, {a.length-1,0}, {a.length-1,a.length-1} },new int[][]{ {0,0}, {0,a.length-1}, {a.length-1,0}, {a.length-1,a.length-1} },a.length); for(int i=0;i<a.length;i++){ for(int j=0;j<a.length;j++){ System.out.print(result2[i][j]+" "); } System.out.println(); } System.out.println("resule3:strassenMultipy"); int[][]result3=strassenMultipy(a,b ,new int[][]{ {0,0}, {0,a.length-1}, {a.length-1,0}, {a.length-1,a.length-1} },new int[][]{ {0,0}, {0,a.length-1}, {a.length-1,0}, {a.length-1,a.length-1} },a.length); for(int i=0;i<a.length;i++){ for(int j=0;j<a.length;j++){ System.out.print(result3[i][j]+" "); } System.out.println(); } } private static int[][] strassenMultipy(int[][]a,int[][]b,int[][] indexA,int[][]indexB,int size){ int [][] c=new int[size][size]; if(indexA[0][0]-indexA[3][0]==0){ c[indexA[0][0]][indexB[0][1]]=a[indexA[0][0]][indexA[0][1]]*b[indexB[0][0]][indexB[0][1]]; }else{ int[][] indexA11=new int[4][2]; indexA11[0][0]=indexA[0][0]; indexA11[0][1]=indexA[0][1]; indexA11[1][0]=indexA[1][0]; indexA11[1][1]=(indexA[1][1]+indexA[0][1])/2; indexA11[2][0]=(indexA[2][0]+indexA[0][0])/2; indexA11[2][1]=indexA[2][1]; indexA11[3][0]=(indexA[3][0]+indexA[0][0])/2; indexA11[3][1]=(indexA[3][1]+indexA[0][1])/2; int [][]indexA12=new int[4][2]; indexA12[0][0]=indexA[0][0]; indexA12[0][1]=(indexA[1][1]+indexA[0][1])/2+1; indexA12[1][0]=indexA[1][0]; indexA12[1][1]=indexA[1][1]; indexA12[2][0]=(indexA[3][0]+indexA[0][0])/2; indexA12[2][1]=(indexA[3][1]+indexA[0][1])/2+1; indexA12[3][0]=(indexA[3][0]+indexA[0][0])/2; indexA12[3][1]=indexA[3][1]; int [][] indexA21=new int[4][2]; indexA21[0][0]=(indexA[2][0]+indexA[0][0])/2+1; indexA21[0][1]=indexA[0][1]; indexA21[1][0]=(indexA[3][0]+indexA[0][0])/2+1; indexA21[1][1]=(indexA[3][1]+indexA[0][0])/2; indexA21[2][0]=indexA[2][0]; indexA21[2][1]=indexA[2][1]; indexA21[3][0]=indexA[3][0]; indexA21[3][1]=(indexA[3][1]+indexA[0][0])/2; int[][]indexA22=new int[4][2]; indexA22[0][0]=(indexA[3][0]+indexA[0][0])/2+1; indexA22[0][1]=(indexA[3][1]+indexA[0][1])/2+1; indexA22[1][0]=(indexA[3][0]+indexA[0][0])/2+1; indexA22[1][1]=indexA[3][1]; indexA22[2][0]=indexA[3][0]; indexA22[2][1]=(indexA[3][1]+indexA[0][1])/2+1; indexA22[3][0]=indexA[3][0]; indexA22[3][1]=indexA[3][1]; int[][]indexB11=new int[4][2]; indexB11[0][0]=indexB[0][0]; indexB11[0][1]=indexB[0][1]; indexB11[1][0]=indexB[1][0]; indexB11[1][1]=(indexB[1][1]+indexB[0][1])/2; indexB11[2][0]=(indexB[2][0]+indexB[0][0])/2; indexB11[2][1]=indexB[2][1]; indexB11[3][0]=(indexB[3][0]+indexB[0][0])/2; indexB11[3][1]=(indexB[3][1]+indexB[0][1])/2; int[][]indexB12=new int[4][2]; indexB12[0][0]=indexB[0][0]; indexB12[0][1]=(indexB[1][1]+indexB[0][1])/2+1; indexB12[1][0]=indexB[1][0]; indexB12[1][1]=indexB[1][1]; indexB12[2][0]=(indexB[3][0]+indexB[0][0])/2; indexB12[2][1]=(indexB[3][1]+indexB[0][1])/2+1; indexB12[3][0]=(indexB[3][0]+indexB[0][0])/2; indexB12[3][1]=indexB[3][1]; int[][]indexB21=new int[4][2]; indexB21[0][0]=(indexB[2][0]+indexB[0][0])/2+1; indexB21[0][1]=indexB[0][1]; indexB21[1][0]=(indexB[3][0]+indexB[0][0])/2+1; indexB21[1][1]=(indexB[3][1]+indexB[0][0])/2; indexB21[2][0]=indexB[2][0]; indexB21[2][1]=indexB[2][1]; indexB21[3][0]=indexB[3][0]; indexB21[3][1]=(indexB[3][1]+indexB[0][0])/2; int[][]indexB22=new int[4][2]; indexB22[0][0]=(indexB[3][0]+indexB[0][0])/2+1; indexB22[0][1]=(indexB[3][1]+indexB[0][1])/2+1; indexB22[1][0]=(indexB[3][0]+indexB[0][0])/2+1; indexB22[1][1]=indexB[3][1]; indexB22[2][0]=indexB[3][0]; indexB22[2][1]=(indexB[3][1]+indexB[0][1])/2+1; indexB22[3][0]=indexB[3][0]; indexB22[3][1]=indexB[3][1]; int n=size; int [][] p1=new int[size][size]; int [][]p1a=strassenMultipy(a,b,indexA11,indexB12,size); int [][]p1b=strassenMultipy(a,b,indexA11,indexB22,size); for(int i=0;i<n;i++){ for(int j=0;j<n;j++){ p1[i][j]+=p1a[i][j]-p1b[i][j]; } } int [][] p2=new int[size][size]; int [][]p2a=strassenMultipy(a,b,indexA11,indexB22,size); int [][]p2b=strassenMultipy(a,b,indexA12,indexB22,size); for(int i=0;i<n;i++){ for(int j=0;j<n;j++){ p2[i][j]+=p2a[i][j]+p2b[i][j]; } } int [][] p3=new int[size][size]; int [][]p3a=strassenMultipy(a,b,indexA21,indexB11,size); int [][]p3b=strassenMultipy(a,b,indexA22,indexB11,size); for(int i=0;i<n;i++){ for(int j=0;j<n;j++){ p3[i][j]+=p3a[i][j]+p3b[i][j]; } } int [][] p4=new int[size][size]; int [][]p4a=strassenMultipy(a,b,indexA22,indexB21,size); int [][]p4b=strassenMultipy(a,b,indexA22,indexB11,size); for(int i=0;i<n;i++){ for(int j=0;j<n;j++){ p4[i][j]+=p4a[i][j]-p4b[i][j]; } } int [][] p5=new int[size][size]; int [][]p5a=strassenMultipy(a,b,indexA11,indexB11,size); int [][]p5b=strassenMultipy(a,b,indexA11,indexB22,size); int [][]p5c=strassenMultipy(a,b,indexA22,indexB11,size); int [][]p5d=strassenMultipy(a,b,indexA22,indexB22,size); for(int i=0;i<n;i++){ for(int j=0;j<n;j++){ p5[i][j]+=p5a[i][j]+p5b[i][j]+p5c[i][j]+p5d[i][j]; } } int [][] p6=new int[size][size]; int [][]p6a=strassenMultipy(a,b,indexA12,indexB21,size); int [][]p6b=strassenMultipy(a,b,indexA12,indexB22,size); int [][]p6c=strassenMultipy(a,b,indexA22,indexB21,size); int [][]p6d=strassenMultipy(a,b,indexA22,indexB22,size); for(int i=0;i<n;i++){ for(int j=0;j<n;j++){ p6[i][j]+=p6a[i][j]+p6b[i][j]-p6c[i][j]-p6d[i][j]; } } int [][] p7=new int[size][size]; int [][]p7a=strassenMultipy(a,b,indexA11,indexB11,size); int [][]p7b=strassenMultipy(a,b,indexA11,indexB12,size); int [][]p7c=strassenMultipy(a,b,indexA21,indexB11,size); int [][]p7d=strassenMultipy(a,b,indexA21,indexB12,size); for(int i=0;i<n;i++){ for(int j=0;j<n;j++){ p7[i][j]+=p7a[i][j]+p7b[i][j]-p7c[i][j]-p7d[i][j]; } } for(int i=0;i<n;i++){ for(int j=0;j<n;j++){ c[i][j]+=p5[i][j]+p4[i][j]-p2[i][j]+p6[i][j]+p1[i][j]+p2[i][j]+p3[i][j]+p4[i][j]+p5[i][j]+p1[i][j]-p3[i][j]-p7[i][j]; } } } return c; } private static int[][] ordernaryMultipy(int [][] a,int[][]b){ int n=a.length; int [][] c=new int ; for(int i=0;i<n;i++){ for(int j=0;j<n;j++){ for(int k=0;k<n;k++){ c[i][k]+=a[i][j]*b[j][k]; } } } return c; } private static int[][] recruciveMultipy(int [][]a,int[][]b,int[][] indexA,int[][]indexB,int size){ int [][] c=new int[size][size]; if(indexA[0][0]-indexA[3][0]==0){ c[indexA[0][0]][indexB[0][1]]=a[indexA[0][0]][indexA[0][1]]*b[indexB[0][0]][indexB[0][1]]; }else{ int n=size; int[][] indexA11=new int[4][2]; indexA11[0][0]=indexA[0][0]; indexA11[0][1]=indexA[0][1]; indexA11[1][0]=indexA[1][0]; indexA11[1][1]=(indexA[1][1]+indexA[0][1])/2; indexA11[2][0]=(indexA[2][0]+indexA[0][0])/2; indexA11[2][1]=indexA[2][1]; indexA11[3][0]=(indexA[3][0]+indexA[0][0])/2; indexA11[3][1]=(indexA[3][1]+indexA[0][1])/2; int [][]indexA12=new int[4][2]; indexA12[0][0]=indexA[0][0]; indexA12[0][1]=(indexA[1][1]+indexA[0][1])/2+1; indexA12[1][0]=indexA[1][0]; indexA12[1][1]=indexA[1][1]; indexA12[2][0]=(indexA[3][0]+indexA[0][0])/2; indexA12[2][1]=(indexA[3][1]+indexA[0][1])/2+1; indexA12[3][0]=(indexA[3][0]+indexA[0][0])/2; indexA12[3][1]=indexA[3][1]; int [][] indexA21=new int[4][2]; indexA21[0][0]=(indexA[2][0]+indexA[0][0])/2+1; indexA21[0][1]=indexA[0][1]; indexA21[1][0]=(indexA[3][0]+indexA[0][0])/2+1; indexA21[1][1]=(indexA[3][1]+indexA[0][0])/2; indexA21[2][0]=indexA[2][0]; indexA21[2][1]=indexA[2][1]; indexA21[3][0]=indexA[3][0]; indexA21[3][1]=(indexA[3][1]+indexA[0][0])/2; int[][]indexA22=new int[4][2]; indexA22[0][0]=(indexA[3][0]+indexA[0][0])/2+1; indexA22[0][1]=(indexA[3][1]+indexA[0][1])/2+1; indexA22[1][0]=(indexA[3][0]+indexA[0][0])/2+1; indexA22[1][1]=indexA[3][1]; indexA22[2][0]=indexA[3][0]; indexA22[2][1]=(indexA[3][1]+indexA[0][1])/2+1; indexA22[3][0]=indexA[3][0]; indexA22[3][1]=indexA[3][1]; int[][]indexB11=new int[4][2]; indexB11[0][0]=indexB[0][0]; indexB11[0][1]=indexB[0][1]; indexB11[1][0]=indexB[1][0]; indexB11[1][1]=(indexB[1][1]+indexB[0][1])/2; indexB11[2][0]=(indexB[2][0]+indexB[0][0])/2; indexB11[2][1]=indexB[2][1]; indexB11[3][0]=(indexB[3][0]+indexB[0][0])/2; indexB11[3][1]=(indexB[3][1]+indexB[0][1])/2; int[][]indexB12=new int[4][2]; indexB12[0][0]=indexB[0][0]; indexB12[0][1]=(indexB[1][1]+indexB[0][1])/2+1; indexB12[1][0]=indexB[1][0]; indexB12[1][1]=indexB[1][1]; indexB12[2][0]=(indexB[3][0]+indexB[0][0])/2; indexB12[2][1]=(indexB[3][1]+indexB[0][1])/2+1; indexB12[3][0]=(indexB[3][0]+indexB[0][0])/2; indexB12[3][1]=indexB[3][1]; int[][]indexB21=new int[4][2]; indexB21[0][0]=(indexB[2][0]+indexB[0][0])/2+1; indexB21[0][1]=indexB[0][1]; indexB21[1][0]=(indexB[3][0]+indexB[0][0])/2+1; indexB21[1][1]=(indexB[3][1]+indexB[0][0])/2; indexB21[2][0]=indexB[2][0]; indexB21[2][1]=indexB[2][1]; indexB21[3][0]=indexB[3][0]; indexB21[3][1]=(indexB[3][1]+indexB[0][0])/2; int[][]indexB22=new int[4][2]; indexB22[0][0]=(indexB[3][0]+indexB[0][0])/2+1; indexB22[0][1]=(indexB[3][1]+indexB[0][1])/2+1; indexB22[1][0]=(indexB[3][0]+indexB[0][0])/2+1; indexB22[1][1]=indexB[3][1]; indexB22[2][0]=indexB[3][0]; indexB22[2][1]=(indexB[3][1]+indexB[0][1])/2+1; indexB22[3][0]=indexB[3][0]; indexB22[3][1]=indexB[3][1]; int [][]c11x=recruciveMultipy(a,b,indexA11,indexB11,size); int [][]c11y=recruciveMultipy(a,b,indexA12,indexB21,size); for(int i=0;i<n;i++){ for(int j=0;j<n;j++){ c[i][j]+=c11x[i][j]+c11y[i][j]; } } int[][]c12x=recruciveMultipy(a,b,indexA11,indexB12,size); int[][]c12y=recruciveMultipy(a,b,indexA12,indexB22,size); for(int i=0;i<n;i++){ for(int j=0;j<n;j++){ c[i][j]+=c12x[i][j]+c12y[i][j]; } } int[][]c21x=recruciveMultipy(a,b,indexA21,indexB11,size); int[][]c21y=recruciveMultipy(a,b,indexA22,indexB21,size); for(int i=0;i<n;i++){ for(int j=0;j<n;j++){ c[i][j]+=c21x[i][j]+c21y[i][j]; } } int[][]c22x=recruciveMultipy(a,b,indexA21,indexB12,size); int[][]c22y=recruciveMultipy(a,b,indexA22,indexB22,size); for(int i=0;i<n;i++){ for(int j=0;j<n;j++){ c[i][j]+=c22x[i][j]+c22y[i][j]; } } } return c; } }
相关文章推荐
- 黑马程序员____矩阵相乘常规法和Strassen方法算法分析
- 反射构造方法以及普通方法
- 【广告算法工程师入门 26】机制设计-考虑客户ROI的机制设计方法与实践
- 二叉树的先序、中序以及后序遍历(递归与非递归方法)
- 树的创建以及树的遍历(递归和非递归方法)
- 二叉树各种遍历算法(递归以及非递归)6
- 算法--方法递归
- KMP模式匹配算法以及普通模式匹配算法
- 空间数据挖掘常用方法,以及和普通数据挖掘的不同之处
- 8皇后以及N皇后算法探究,回溯算法的JAVA实现,非递归,数据结构“栈”实现
- php进行递归时出现Call to a member function 方法() on null的原因以及解决方案
- 算法原理与实践(动态规划与递归)
- Atitit 表达式原理 语法分析 原理与实践 解析java的dsl 递归下降是现阶段主流的语法分析方法
- 用递归方法求裴波那契数列,以及指定某一位的数值
- LBFGS优化算法以及线性搜索中zoom步长选择方法
- 大数相乘以及其高效算法
- 14章类型信息-之类型转换前先做检查--之使用类字面常量--类名.class--以及动态instanceof(isInstance方法)----递归计数(计算各个类的个数)
- 机器学习算法原理与实践(二)、meanshift算法图解以及在图像聚类、目标跟踪中的应用
- 二叉树(一):二叉树的创建以及三种遍历方法的递归实现
- 【算法设计-二叉树遍历】二叉树的递归与非递归遍历方法