• 树形显示


     

    /*
    题目:树形显示
    内容:
    树形结构应用十分广泛。

    下面这段代码根据用户添加的数据,在内存中构建一个逻辑上等价的树形结构。

    通过ShowTree() 可以把它显示为控制中的样子。

    其中:
    a.add('a', 'b');
    a.add('b', 'e');
    表示:'b' 作为 'a' 的孩子节点;'e' 作为 'b'的孩子节点。
    如代码中给出的示例数据,输出结果应该为:

    a--b--e
    | |--f--j
    | |--k
    |--c
    |--d--g--h
    |--i


    请阅读下面的代码,填写缺失的部分(下划线部分)。

    注意:请把填空的答案(仅填空处的答案,不包括题面)存入考生文件夹下对应题号的“解答.txt”中即可。
    直接写在题面中不能得分。

    import java.util.*;

    class MyTree
    {
    private Map map = new HashMap();

    public void add(char parent, char child)
    {
    List<Character> t = (List<Character>)map.get(parent);
    if(t==null)
    {
    t = new Vector<Character>();
    ____________________; // 填空1
    }
    t.add(child);
    }

    public List<Character> getChild(char x)
    {
    return (List<Character>)map.get(x);
    }
    }

    public class My
    {
    public static List<String> showTree(MyTree tree, char x)
    {
    List<Character> t = tree.getChild(x);

    List<String> r = new Vector<String>();

    if(t==null)
    {
    r.add("" + x);
    return r;
    }

    for(int i=0; i<t.size(); i++)
    {
    List<String> ri = showTree(tree, t.get(i));
    for(int j=0; j<ri.size(); j++)
    {
    String pre = "| ";
    if(j==0)
    {
    if(i==0)
    pre = x + "--";
    else
    pre = "|--";
    }
    else
    {
    if(i==__________________) // 填空2
    pre = " ";
    else
    pre = "| ";
    }

    r.add(pre + ri.get(j));
    }
    }

    return r;
    }

    public static void main(String[] args)
    {
    MyTree a = new MyTree();
    a.add('a', 'b');
    a.add('b', 'e');
    a.add('b', 'f');
    a.add('a', 'c');
    a.add('a', 'd');
    a.add('d', 'g');
    a.add('d', 'i');
    a.add('g', 'h');
    a.add('f', 'j');
    a.add('f', 'k');

    List<String> lst = showTree(a, 'a');
    for(int i=0; i<lst.size(); i++)
    {
    System.out.println(lst.get(i));
    }
    }
    }
    */

     1 import java.util.HashMap;
     2 import java.util.List;
     3 import java.util.Map;
     4 import java.util.Vector;
     5 
     6 class MyTree
     7 {
     8     private Map map = new HashMap();//定义了一个变量,map
     9     
    10     public void add(char parent, char child)//写了一个方法,add,
    11     {
    12         List<Character> t = (List<Character>)map.get(parent);
    13         if(t==null)
    14         {
    15             t = new Vector<Character>();
    16             map.put(parent, t);  // 填空1
    17         }
    18         t.add(child);
    19     }
    20     
    21     public List<Character> getChild(char x)
    22     {
    23         return (List<Character>)map.get(x);
    24     }
    25 }
    26 
    27 public class My
    28 {
    29     public static List<String> showTree(MyTree tree, char x)//这里为什么要两个参数?
    30     {
    31         List<Character> t = tree.getChild(x);//这里存的是Character
    32         
    33         List<String> r = new Vector<String>();//这里存的是String
    34         
    35         if(t==null)//这句是废话,
    36         {
    37             r.add("" + x);
    38             return r;//返回的是String
    39         }
    40                 
    41         for(int i=0; i<t.size(); i++)//主要看这里的循环,
    42         {
    43             List<String> ri = showTree(tree, t.get(i));//擦,递归了,
    44             for(int j=0; j<ri.size(); j++)
    45             {
    46                 String pre = "|  ";
    47                 if(j==0)
    48                 {
    49                     if(i==0)
    50                         pre = x + "--";
    51                     else 
    52                         pre = "|--";
    53                 }
    54                 else
    55                 {
    56                     if(i==t.size()-1)    // 填空2
    57                         pre = "   ";
    58                     else
    59                         pre = "|  ";
    60                 }
    61                 
    62                 r.add(pre + ri.get(j));
    63             }
    64         }
    65         
    66         return r;//返回String
    67     }
    68     
    69     public static void main(String[] args)
    70     {
    71         MyTree a = new MyTree();
    72         a.add('a', 'b');
    73         a.add('b', 'e');
    74         a.add('b', 'f');
    75         a.add('a', 'c');
    76         a.add('a', 'd');
    77         a.add('d', 'g');
    78         a.add('d', 'i');
    79         a.add('g', 'h');
    80         a.add('f', 'j');
    81         a.add('f', 'k');
    82         
    83         List<String> lst = showTree(a, 'a');
    84         for(int i=0; i<lst.size(); i++)
    85         {
    86             System.out.println(lst.get(i));
    87         }
    88     }
    89 }

    /*
    * 数据结构没学好,只能抄抄答案了,,,,
    V get(Object key)
    返回此映射中映射到指定键的值。如果此映射中没有该键的映射关系,则返回 null。返回 null 值并非一定 表明此映射不包含该键的映射关系;也可能此映射将该键显示地映射到 null。可使用 containsKey 操作来区分这两种情况。
    更正式地说,如果此映射包含满足以下从键 k 到值 v 的映射关系:(key==null ? k==null :key.equals(k)),则此方法返回 v;否则返回 null(最多只能有一个这样的映射关系)。


    */

  • 相关阅读:
    备份恢复八大核心
    ORACLE CentOS5.6安装
    ORA-00205
    sf02_选择排序算法Java与Python实现
    解决SQL命令行回退的问题
    redhat 6.4 yum 本地配置简记
    ORA-12705: Cannot access NLS data files or invalid environment specified
    asmca无法创建ASM磁盘
    Sort List
    Merge k Sorted Lists
  • 原文地址:https://www.cnblogs.com/wsxjbky/p/3059010.html
Copyright © 2020-2023  润新知