輸入N組父子對,求父子對所組成的二叉樹的高度----17年某公司的筆試題

題目的大體意思以下:java

輸入N組數,一組數表明一個父子對(如,0 1,0表明父節點,1表明子節點),求這N組數所組成的二叉樹的高度;數組

例如:spa

輸入:6code

    0 1blog

    0 2it

    1 3class

    1 4import

    2 5二叉樹

    3 6im

輸出:4

解題思路:動態規劃法,使用一個數組hight[N]記錄每組數所能組成的二叉樹的高度,初始化爲全1數組,使用一個數組visited[N]來記錄每組數的訪問狀況,找出最優子結構:

當visited[i]=0時,visited[i]=1,hight[i] = hight[i]+1;

而後,當matrix[j][0]=matrix[i][1]且visited[j]=0時,hight[j] = hight[i]+1,visited[j]=1;

代碼以下:

import java.util.Scanner;

public class Main {

    /**
     * @param args
     */
    public static void main(String[] args) {
        // TODO Auto-generated method stub

        Scanner scanner = new Scanner(System.in);
        while(scanner.hasNext()){
            int groups = scanner.nextInt();
            int[][] matrix = new int[groups][2];for(int i=0;i<groups;i++){
                for(int j=0;j<2;j++){
                    matrix[i][j] = scanner.nextInt();
                }
            }
        //動態規劃輸出處理
System.out.println(maxHightHelper(matrix));

} }//動態規劃 public static int maxHightHelper(int[][] matrix){ if(matrix==null||matrix.length==0) return 0; //記錄當前組的高度 int[] hight = new int[matrix.length]; for(int i=0;i<hight.length;i++) hight[i] = 1; byte[] visited = new byte[matrix.length]; for(int i=0;i<matrix.length;i++){ if(visited[i]==0){ visited[i] = 1; hight[i] = hight[i]+1; } for(int j=i+1;j<matrix.length;j++){ if(matrix[j][0]==matrix[i][1]&&visited[j]==0){ visited[j] = 1; hight[j] = hight[i] +1; } } } //找最大的高度 int max = 0; for(int i=0;i<hight.length;i++){ if(max<hight[i]) max = hight[i]; } return max; } }
相關文章
相關標籤/搜索