P3884 二叉树问题 (DFS)

import java.util.Scanner;
/**
 * P3884二叉树问题
 */
public class P3884 {
    static int dx=0;
    static int dy=0;
    static Scanner in = new Scanner(System.in);
    static int n = in.nextInt();
    static int deep[] = new int[n + 1]; //每个节点的深度 ,下标从1开始
    static int wide[] = new int[n + 1]; //每一层的宽度
    static int fat[] = new int[n + 1]; //保存当前节点的父节点
    static int result=0;

    public static void main(String[] args) {
        int depth = 0;	//最深深度 
        int length = 0; //最大宽度
        deep[1] = 1; //第一个节点的深度为1;
        wide[1] = 1; //第一层宽度为1;
        length = wide[1];
        for (int i = 1; i < n; i++) {
            int u = in.nextInt();
            int v = in.nextInt();
            deep[v] = deep[u] + 1;
            fat[v] = u;
            depth = Math.max(depth, deep[v]);
            wide[deep[v]]++;
            length = Math.max(length, wide[deep[v]]);
        }
        
        int x = in.nextInt();
        int y = in.nextInt();
        result = dfs(x, y);
        
        System.out.println(depth);
        System.out.println(length);
        System.out.println(result);
    }

    private static int dfs(int x, int y) {
        if (x == y) {
            result=dx*2+dy;
           return result;
        }
        if (deep[x] == deep[y]) {
            x = fat[x];
            y = fat[y];
            dx++;
            dy++;
        }
        if (deep[x] > deep[y]) {
            dx++;
            x = fat[x];
        }
        if (deep[x] < deep[y]) {
            y = fat[y];
            dy++;
        }
        dfs(x, y);
        return result;
    }
}

猜你喜欢

转载自blog.csdn.net/qq_28635317/article/details/113682219
今日推荐