国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁(yè) > 開發(fā) > Java > 正文

Java實(shí)現(xiàn)二叉樹的建立、計(jì)算高度與遞歸輸出操作示例

2024-07-14 08:43:41
字體:
供稿:網(wǎng)友

本文實(shí)例講述了Java實(shí)現(xiàn)二叉樹的建立、計(jì)算高度與遞歸輸出操作。分享給大家供大家參考,具體如下:

1. 建立 遞歸輸出 計(jì)算高度 前中后三種非遞歸輸出

public class Tree_Link {    private int save = 0;    private int now = 0;    Scanner sc = new Scanner(System.in);    /*     * 構(gòu)造函數(shù)     */    Tree_Link(){    }    /*     * 鏈表建立     */    public Tree Link_Build(Tree head){//        Tree head = new Tree();//頭節(jié)點(diǎn)        System.out.println("繼續(xù)code:1");        int flag = sc.nextInt();        if(flag != 1){            return head;        }else{            System.out.println("/n/n/n輸入 節(jié)點(diǎn)信息:");            head.SetCode(sc.nextInt());            System.out.println("/n建立 左 子樹code:1  否則:0");            flag = sc.nextInt();            if(flag == 1){                now++;                Tree LTree = new Tree();                head.SetLtree(LTree);                  LTree.SetFronttree(head);//設(shè)置父母節(jié)點(diǎn)                Link_Build( head.GetLtree() );            }            System.out.println("/n當(dāng)前位置:" + head.GetCode());            System.out.println("/n建立 右 子樹code:1  否則:0");            flag = sc.nextInt();            if(flag == 1){                now++;                Tree Rtree = new Tree();                head.SetRtree(Rtree);                Rtree.SetFronttree(head);//設(shè)置父母節(jié)點(diǎn)                Link_Build( head.GetRtree() );            }            if( now > save ){                save = now;            }            now--;        }        return head;    }    /*     * 輸出樹     */    public Tree output(Tree head){        int flag;        if(head.GetCode() == -1){            return head;        }else{            System.out.println("/n當(dāng)前位置:" + head.GetCode());            System.out.println(head.GetLtree() != null);            if(head.GetLtree() != null){                System.out.println("/n訪問 左子樹:");                output( head.GetLtree() );            }            if(head.GetRtree() != null){                System.out.println("/n訪問 右子樹:");                output( head.GetRtree() );            }        }        return head;    }    /*     * 獲得高度     */    public int GetSave(){        return this.save;    }    /*     * 非遞歸 前序遍歷     */    public void Front_Traverse(Tree head){        Tree star = head;//退出標(biāo)記        int choose = 1; //左        int flag = 1;  //右        System.out.println( "<---前序遍歷--->" + head.GetCode() );//先訪問根        while(true){            if( head.GetLtree() != null && choose != 0 ){                head = head.GetLtree();                System.out.println( "<---前序遍歷--->" + head.GetCode() );//獲得信息                flag = 1;            }else if( head.GetRtree() != null && flag != 0 ){                head = head.GetRtree();                System.out.println( "<---前序遍歷--->" + head.GetCode() );                choose = 1;            }else if( flag == 0 && choose == 0 && head == star){                break;            }else{                if(head == head.GetFronttree().GetRtree()){                    flag = 0;                    choose = 0;                }                if(head == head.GetFronttree().GetLtree()){                    choose = 0;                    flag = 1;                }                head = head.GetFronttree();                System.out.println("獲得 父母" + head.GetCode());                System.out.println( "/n/n/n" );            }        }    }    /*     * 非遞歸 中序遍歷     */    public void Center_Traverse(Tree head){        Tree star = head;//退出標(biāo)記        int choose = 1; //左        int flag = 1;  //右        while(true){            if( head.GetLtree() != null && choose != 0 ){                head = head.GetLtree();                flag = 1;            }else if( head.GetRtree() != null && flag != 0 ){                if(head.GetLtree() == null){//因?yàn)樽筮厼榭斩祷?                   System.out.println( "<-1--中序遍歷--->" + head.GetCode());                }                head = head.GetRtree();                choose = 1;            }else if( flag == 0 && choose == 0 && head == star){                break;            }else{                int area = 0;//判斷哪邊回來                flag = 1;                choose = 1;                if(head == head.GetFronttree().GetRtree()){                    area = 1;//右邊回來                    flag = 0;                    choose = 0;                }                if(head == head.GetFronttree().GetLtree()){                    area = 2;//左邊回來                    choose = 0;                    flag = 1;                }                if( head.GetLtree() == null && head.GetRtree() == null ){//因?yàn)樽筮厼榭斩祷?                   System.out.println( "<-2--中序遍歷--->" + head.GetCode());                }                head = head.GetFronttree();                if( area == 2){//因?yàn)樽筮呍L問完返回                    System.out.println( "<-3--中序遍歷--->" + head.GetCode());                }                System.out.println("獲得 父母" + head.GetCode());                System.out.println( "/n/n/n" );            }        }    }    /*     * 非遞歸 后續(xù)遍歷     */    public void Bottom_Traverse(Tree head){        Tree star = head;//退出標(biāo)記        int choose = 1; //左        int flag = 1;  //右        while(true){            if( head.GetLtree() != null && choose != 0 ){                head = head.GetLtree();                flag = 1;            }else if( head.GetRtree() != null && flag != 0 ){                head = head.GetRtree();                choose = 1;            }else if( flag == 0 && choose == 0 && head == star){                break;            }else{                int area = 0;//判斷哪邊回來                flag = 1;                choose = 1;                if(head == head.GetFronttree().GetRtree()){                    area = 1;//右邊回來                    flag = 0;                    choose = 0;                }                if(head == head.GetFronttree().GetLtree()){                    choose = 0;                    flag = 1;                }                if(head.GetRtree() == null){//因?yàn)橛疫厼榭斩祷?                   System.out.println( "<-1--后序遍歷--->" + head.GetCode());                }                head = head.GetFronttree();                if( area == 1){                    System.out.println( "<-2--后序遍歷--->" + head.GetCode());                }                System.out.println("獲得 父母" + head.GetCode());                System.out.println( "/n/n/n" );            }        }    }}

2. Tree 類實(shí)現(xiàn):

public class Tree {    private int code = -1;    private Tree Fonttree;    private Tree Ltree;    private Tree Rtree;    Tree(){        this.code = -1;        this.Ltree = null;        this.Rtree = null;    }    /*     * 樹內(nèi)容查看方法:     */    public void SetCode(int code){//設(shè)置編號(hào)        this.code = code;    }    public int GetCode(){     //獲取編號(hào)        return this.code;    }    /*     * 設(shè)置父母指針:     */    public void SetFronttree(Tree Front){        this.Fonttree = Front;    }    public Tree GetFronttree(){        System.out.println("獲得 父母");        return this.Fonttree;    }    /*     * 設(shè)置左子女:     */    public void SetLtree(Tree Ltree){        this.Ltree = Ltree;    }    public Tree GetLtree(){        System.out.println("獲得左子樹");        return this.Ltree;    }    /*     * 設(shè)置右子女:     */    public void SetRtree(Tree Rtree){        this.Rtree = Rtree;    }    public Tree GetRtree(){        System.out.println("獲得右子樹");        return this.Rtree;    }}

3. 主函數(shù)測(cè)試:

public class MainActivity {    Scanner sc = new Scanner(System.in);    public static void main(String[] args) {        Tree head = new Tree();        Tree_Link link_1st = new Tree_Link();        head = link_1st.Link_Build(head);        System.out.println("Build succeed !");        System.out.println("/n二叉樹高度-->" + link_1st.GetSave());        link_1st.output(head);        System.out.println("Output Over  !");        System.out.println("/n/n<----------------前------------------>/n前序訪問根:");        link_1st.Front_Traverse(head);        System.out.println("/n/n<----------------中------------------>/n中序訪問根:");        link_1st.Center_Traverse(head);        System.out.println("/n/n<----------------后------------------>/n后序訪問根:");        link_1st.Bottom_Traverse(head);        System.out.println("/n/n/n/nText over !/n/n/n");    }}

希望本文所述對(duì)大家java程序設(shè)計(jì)有所幫助。


注:相關(guān)教程知識(shí)閱讀請(qǐng)移步到JAVA教程頻道。
發(fā)表評(píng)論 共有條評(píng)論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 宁强县| 钟山县| 监利县| 南昌县| 会同县| 买车| 甘孜县| 梨树县| 泰安市| 台东县| 商城县| 张掖市| 阜平县| 富阳市| 朝阳区| 内丘县| 沁阳市| 新乐市| 益阳市| 茶陵县| 精河县| 分宜县| 育儿| 容城县| 东明县| 三都| 灵山县| 太保市| 阿克苏市| 巨野县| 蒙阴县| 保亭| 浮山县| 裕民县| 安丘市| 神池县| 建德市| 武宁县| 连州市| 巫溪县| 乳源|