二叉樹求深度
阿新 • • 發佈:2018-11-11
文章目錄
題目
求二叉樹的深度。第一行n表示二叉樹節點個數,接下來的n-1行第一個數表示根節點,第二個節點表示孩子節點。
5
0 1
0 2
1 3
1 4
思想
第一步:存二叉樹(用二維陣列存)
第二步:採用先序遍歷,求深度
程式碼
public class Main {
private static int max=0;//用於存二叉樹最大的深度
private static int now=0;//當前的深度
public static void main(String[ ] args) {
//輸入
Scanner s=new Scanner(System.in);
int size=Integer.parseInt(s.nextLine());
int [][]a=new int[size][2];
for(int i=0;i<size;++i){
a[i][0]=-1;
a[i][1]=-1;
}
while(s.hasNextLine()){
String str=s.nextLine();
String[] temp=str.split("\\s+");
if(temp.length!=2){
break ;
}
int parent=Integer.parseInt(temp[0]);//根節點
int child=Integer.parseInt(temp[1]);//孩子節點
if(a[parent][0]==-1){
a[parent][0]=child;
}else{
a[parent][1]=child;
}
}
//進行深度遍歷求二叉樹深度
boolean v[]=new boolean[size];//標記節點是否已經被放問了
go(a,v,0);
System.out.println(max);
}
public static void go(int[][]a,boolean[] v,int position){
if(position==-1){
max=now>max?now:max;
return ;
}
v[position]=true;
now++;
go(a,v,a[position][0]);
go(a,v,a[position][1]);
now--;//左右試探完成後回溯
return;
}
}