BiTree显示Test.java

来源:互联网 发布:python idle下载 编辑:程序博客网 时间:2024/06/05 10:28
package A类有价值的回顾的;public class BiTreeTest {    public static void main(String[] args){        BiTree root = new BiTree(1);        root.add(new BiTree(2));        root.add(new BiTree(27));        root.add(new BiTree(4));        root.add(new BiTree(55));        root.add(new BiTree(6));        root.add(new BiTree(7));        root.add(new BiTree(85));        root.add(new BiTree(9));        //root.mid_trav();        root.show();    }}class BiTree {//二叉树本来就是递归定义的,所以用递归来做非常方便    private int v;    private BiTree l;    private BiTree r;    public BiTree(int x){        v = x;    }    public void add(BiTree b){        if(b.v < v){            if(l == null) l = b;//如果能插就插进去,不能插再递归            else l.add(b);        }        else{            if(r == null) r = b;            else r.add(b);        }    }    public void mid_trav(){//递归类型的中序遍历,还有前序遍历        if(l != null) l.mid_trav();        System.out.println(v);        if(r != null) r.mid_trav();    }    private int getWith(){        int w = (" "+v).length();        if(l!=null) w += l.getWith();        if(r!=null) w += r.getWith();        return w;    }    private int getRootPos(int x){        return (l==null) ? x:x+l.getWith();    }                                        //x,y相当于   /--3----\ 起点所在的横纵坐标        private void printInBuf(char[][] buf,int x,int y){        String sv = " "+ v;                  int p1 = (l==null)? x :l.getRootPos(x);          int p2 = getRootPos(x);        int p3 = (r==null)? p2:r.getRootPos(p2+sv.length());        buf[y][p2] = '|';        for(int i= p1;i<p3;i++) buf[y+1][i] = '-';        for(int i=0;i<sv.length();i++) buf[y+1][p2+i] = sv.charAt(i);                                  //用数字覆盖掉'-'        if(p1<p2) buf[y+1][p1] ='/';        if(p3>p2) buf[y+1][p3] ='\\';//必须要转义        if(l!=null) l.printInBuf(buf, x, y+2);//再从y+2往下递归        if(r!=null) r.printInBuf(buf, p2+sv.length(), y+2);    }    public int getHeigth(){        int h=2;        int hl= l==null?0:l.getHeigth();        int hr= r==null?0:r.getHeigth();        return h+Math.max(hl, hr);    }    private void showBuf(char[][] x){        for(int i=0;i<x.length;i++){            for(int j=0;j<x[i].length;j++){                System.out.print(x[i][j]==0?' ':x[i][j]);                                //char ch='0'; ch的值是字符'0'的ascii码值,即0x30                                //char未初始化的话赋值为0            }            System.out.println();        }    }    public void show(){        char[][] buf = new char[getHeigth()][getWith()];        printInBuf(buf, 0, 0);        showBuf(buf);    }}
原创粉丝点击