一、用递归计算二叉树中叶子节点数目
package shiyan;
import java.util.Scanner;
public class bintree {
public static void main(String[] args) {
bintree bt=new bintree();
System.out.println("请输入一个前序序列的线索二叉树序列,空结点用null表示,每个结点间用逗号隔开,结点的数据前表示其左子树情况,有为1,无为0,结点后的数据表示右子树,有1无0:");
Scanner in = new Scanner(System.in);
String st=in.nextLine();
String[] arr=st.split(" ");
int count=0;
for(int i=0;i<arr.length;i++) {
if(arr[i].startsWith("0")&&arr[i].endsWith("0"))
count++;
}
System.out.println("叶子节点数为:"+count);
}
}
运行截图:
二、实现图的存储
package shiyan;
import java.util.Scanner;
public class tu {
public static void main(String[] args) {
tu ntu=new tu();
System.out.println("请输入结点个数:");
Scanner in0=new Scanner(System.in);
int n=in0.nextInt();
System.out.println("请输入边的条数:");
Scanner in3=new Scanner(System.in);
int m=in3.nextInt();
System.out.println("请输入顶点:");
Scanner in1 = new Scanner(System.in);
String[] dd=new String[n];
for(int i=0;i<n;i++) {
dd[i]=in1.next().toString();
}
System.out.println("请输入边,如3 2表示以3为弧尾,以2为弧头的边:");
Scanner in = new Scanner(System.in);
String tu[]=new String[(2*m)];
for(int i=0;i<(2*m);i++) {
tu[i]=in.next();
}
String tu1[][]=new String[n+1][n+1];
tu1[0][0]="null";
for(int i=1;i<n+1;i++) {
tu1[0][i]=dd[i-1];
tu1[i][0]=dd[i-1];
}
for(int j=1;j<n+1;j++) {
for(int k=1;k<n+1;k++) {
int i=0;
tu1[j][k]="0";
while(i<(2*m)&&tu1[j][k]!="1") {
if(tu[i].equals(tu1[j][0])&&tu[i+1].equals(tu1[0][k])) {
tu1[j][k]="1";}else {i=i+2;}
}
}
}
System.out.println("该有向图的邻接矩阵为:");
for(int j=1;j<n+1;j++) {
for(int k=1;k<n+1;k++) {
System.out.print(tu1[j][k]+" ");
}
System.out.println();
}
}
}
运行截图:
三、实现二分查找算法
package shiyan;
import java.util.Scanner;
import java.util.ArrayList;
import java.util.Arrays;
public class erfensearch {
public static void main(String[] args) {
System.out.println("请输入有序表:");
Scanner input = new Scanner(System.in);
String s = input.nextLine();
String[] s1 = s.split(" ");
int table[]=new int[s1.length];
for (int i = 0; i < s1.length; i++) {
if(s1[i]!=null&&!s1[i].equals(""))
table[i]=Integer.valueOf(s1[i]);
}
System.out.println("请输入要查询的数:");
Scanner in1=new Scanner(System.in);
int k=in1.nextInt();
int low=0;
int high=table.length;
int mid;mid=(high+low)/2;
while(high>low) {
if(table[mid]==k) {
System.out.println("查询成功,位置为"+(mid));break;
}else if(table[mid]>k) {
high=mid-1;mid=(high+low)/2;
}else if(table[mid]<k) {
low=mid+1;mid=(high+low)/2;
}
}
if(high<=low) {
System.out.println("查询失败");
}
}
}
运行截图:
四、实现双向冒泡排序算法
package shiyan;
import java.util.Scanner;
public class bubblesort {
public static void main(String[] args) {
System.out.println("请输入无序数组:");
Scanner in = new Scanner(System.in);
while (in.hasNext()) {
String s=in.nextLine();
String[] str=s.split(" ");
int[] a=new int[str.length];
for(int i=0;i<str.length;i++){
a[i]=Integer.parseInt(str[i]);
}
for(int i=0;i<str.length-1;i++){
if(i%2==0) {
for(int j=0;j<str.length-1-(i/2);j++) {
if(a[j]>=a[j+1]) {
int temp=a[j];
a[j]=a[j+1];
a[j+1]=temp;
}
}
}else if(i%2==1) {
for(int j=str.length-1-(i/2);j>0;j--) {
if(a[j]<=a[j-1]) {
int temp=a[j-1];
a[j-1]=a[j];
a[j]=temp;
}
}
}
}
for(int i=0;i<str.length;i++) {
System.out.print(a[i]+" ");
}
}
}
}
运行截图: