示例#1
0
    static void Main()
    {
        var n = int.Parse(Console.ReadLine());

        var map = new int[n][];

        for (int i = 0; i < n; i++)
        {
            var a = Read();
            map[a[0]] = a.Skip(2).ToArray();
        }

        var root = Enumerable.Range(0, n).Except(map.SelectMany(vs => vs)).Single();
        var tree = new UnweightedTree(n, root, map);

        Console.SetOut(new System.IO.StreamWriter(Console.OpenStandardOutput())
        {
            AutoFlush = false
        });
        for (int v = 0; v < n; v++)
        {
            Console.Write($"node {v}: ");
            Console.Write($"parent = {tree.Parents[v]}, ");
            Console.Write($"depth = {tree.Depths[v]}, ");
            Console.Write(v == root ? "root" : map[v].Length > 0 ? "internal node" : "leaf");
            Console.Write($", [");
            Console.Write(string.Join(", ", map[v]));
            Console.WriteLine("]");
        }
        Console.Out.Flush();
    }
示例#2
0
    static void Main()
    {
        var n = int.Parse(Console.ReadLine());

        var map      = new int[n][];
        var siblings = Array.ConvertAll(map, _ => - 1);

        for (int i = 0; i < n; i++)
        {
            var a = Read();
            map[a[0]] = a.Skip(1).Where(v => v != -1).ToArray();

            if (a[1] != -1 && a[2] != -1)
            {
                siblings[a[1]] = a[2];
                siblings[a[2]] = a[1];
            }
        }

        var root = Enumerable.Range(0, n).Except(map.SelectMany(vs => vs)).Single();
        var tree = new UnweightedTree(n, root, map);

        var             heights   = new int[n];
        Func <int, int> GetHeight = null;

        GetHeight = v =>
        {
            if (map[v].Length == 0)
            {
                return(0);
            }
            return(heights[v] = map[v].Max(GetHeight) + 1);
        };
        GetHeight(root);

        for (int v = 0; v < n; v++)
        {
            Console.Write($"node {v}: ");
            Console.Write($"parent = {tree.Parents[v]}, ");
            Console.Write($"sibling = {siblings[v]}, ");
            Console.Write($"degree = {map[v].Length}, ");
            Console.Write($"depth = {tree.Depths[v]}, ");
            Console.Write($"height = {heights[v]}, ");
            Console.WriteLine(v == root ? "root" : map[v].Length > 0 ? "internal node" : "leaf");
        }
    }