树形结构应用


题:
填写代码缺失部分
下面这段代码根据用户添加的数据,在内存中构建一个逻辑上等价的树形结构。
通过ShowTree() 可以把它显示为控制中的样子。
其中:
a.add('a', 'b');
a.add('b', 'e');
表示:'b' 作为 'a' 的孩子节点;'e' 作为 'b'的孩子节点。
如代码中给出的示例数据,输出结果应该为:

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

源码Missing.java


import java.util.*;

class MyTree {
    @SuppressWarnings("rawtypes")
    private Map map = new HashMap();

    @SuppressWarnings({ "unchecked", "rawtypes" })
    public void add(char parent, char child) {
        List t = (List)map.get(parent);
        if(t==null) {
            t = new Vector();
            // 填空1
            map.put(parent, t);
            // 填空1
        }
        t.add(child);
    }
    
    @SuppressWarnings("rawtypes")
    public List getChild(char x) {
        return (List)map.get(x);
    }
}

public class Missing {
    
    @SuppressWarnings({ "rawtypes", "unchecked" })
    public static List showTree(MyTree tree, char x) {
        List t = tree.getChild(x);
        List r = new Vector();
        if(t==null) {
            r.add("" + x);
            return r;
        }
        for(int i=0; i<t.size(); i++) {
            List ri = showTree(tree, (char) 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==ri.size()) // 填空2
                        pre = "   ";
                    else
                        pre = "|  ";
                }
                r.add(pre + ri.get(j));
            }
        }
        return r;
    }

    @SuppressWarnings("rawtypes")
    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 lst = showTree(a, 'a');
        for(int i=0; i<lst.size(); i++) {
            System.out.println(lst.get(i));
        }
    }
}

发表评论

电子邮件地址不会被公开。 必填项已用*标注