java二叉樹排序實現


原創:轉載請注明出處

目的:想用java實現二叉樹排序算法

思想:利用java中面向對象的思想,即:

  Tree:類

  樹根Tree:root    //static所屬於每一個Tree

  左節點Tree:leftSon

  右節點Tree:rightSon

  父親節點Tree:father

上代碼 Tree類:

package com.cissst.dom1;

/**
 * 二叉樹
 * @author phoebe
 */
public class Tree {
    public Integer data;//每一個節點的值
    public static Tree root;//根節點(有且僅有一個)
    public Tree father;//父節點
    public Tree leftSon;//左子節點
    public Tree rightSon;//右子節點
    
    //左樹是否為空
    public boolean hasLeftSon(){
        return leftSon!=null;
    }
    //右樹是否為空
    public boolean hasRightSon(){
        return rightSon!=null;
    }
    
    //插入節點
    public void insert(Integer data,Tree father){
        /**
         * 思想:先讓data和root中的值進行比較,大於0插入右邊,小於0插入左邊,計划使用遞歸思想
         */
        //等於root.data
        if(data.compareTo(father.data)==0){
            return;
        }
        //大於root.data
        if(data.compareTo(father.data)>0){
            //父節點沒有右節點
            if(!father.hasRightSon()){
                father.rightSon = new Tree();//生成一個右節點
                father.rightSon.data=data;//給右節點賦值
                father.rightSon.father=father;//指定右節點的父親是誰
            }else{
                insert(data,father.rightSon);
            }
        }
        
        //小於同上
        if(data.compareTo(father.data)<0){
            //父節點沒有左節點
            if(!father.hasLeftSon()){
                father.leftSon = new Tree();//生成一個右節點
                father.leftSon.data=data;//給右節點賦值
                father.leftSon.father=father;//指定右節點的父親是誰
            }else{
                insert(data,father.leftSon);
            }
        }
    }
    
    /**
     * 總體插入操作
     * 1.判斷是否有樹根,沒有的話將數據添加到樹根里
     * 2.有樹根調用insert的重載方法,判斷插入到左son還是右son
     * @param data
     */
    public void insert(Integer data){
        if(root==null){
            root = new Tree();
            root.data=data;
            return;
        }else{
            insert(data,root);
        }
    }
    
    
}

測試代碼:

package com.cissst.dom1;

/**
 * 樹測試代碼
 * @author phoebe
 */
public class TreeTest {
    public static void main(String[] args) {
        TreeTest tt = new TreeTest();
        Tree tree = new Tree();
        tree.insert(5);
        tree.insert(2);
        tree.insert(3);
        tree.insert(1);
        tree.insert(8);
        tree.insert(3);
        tt.outPutTree(tree.root);
        tt.getMinValue(tree.root);
        tt.getMaxValue(tree.root);
    }
    //遍歷樹中的集合
    public void outPutTree(Tree tree){
        System.out.print(tree.data+" ");
        if(tree.hasLeftSon()){
            outPutTree(tree.leftSon);
        }
        if(tree.hasRightSon()){
            outPutTree(tree.rightSon);
        }
    }
    //找出樹中最小的值
    public void getMinValue(Tree tree){
        if(tree.hasLeftSon()){
            getMinValue(tree.leftSon);
        }else{
            System.out.println("最小值"+tree.data);
        }
    }

    //找出樹中最大的值
    public void getMaxValue(Tree tree){
        if(tree.hasRightSon()){
            getMaxValue(tree.rightSon);
        }else{
            System.out.println("最大值"+tree.data);
        }
    }    
    
}

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM