二叉树的遍历(java代码实现)

二叉树的遍历分为以下三种:

先序遍历:遍历顺序规则为【根左右】

中序遍历:遍历顺序规则为【左根右】

后序遍历:遍历顺序规则为【左右根】

什么是【根左右】?就是先遍历根,再遍历左孩子,最后遍历右孩子

它的前序遍历顺序为:ABDGHCEIF(规则是先是根结点,再前序遍历左子树,再前序遍历右子树)

它的中序遍历顺序为:GDHBAEICF(规则是先中序遍历左子树,再是根结点,再是中序遍历右子树)

它的后序遍历顺序为:GHDBIEFCA(规则是先后序遍历左子树,再是后序遍历右子树,再是根结点)

public class BTree {
public int data;
public BTree father,leftSon,rightSon;
public static BTree root; 

public boolean hasleft(){
    return leftSon!=null;
}
public boolean hasright(){
    return rightSon!=null;
}
public BTree(){
}
//直接插入方法
public void insert(int data){
    if (root==null) {
        root=new BTree();
        root.data=data;
        return;
    }
    
    insert(data,root);
}
//递归插入方法
public void insert(int data,BTree father){
    
    //插入的数据和父节点比较大小
    int compare=data-father.data;
    if (compare==0) {
        return;
    }
    //放在右边
    if (compare>0) {
        //判断有没有右孩子,如果有则递归下一级
        if (father.hasright()) {
            insert(data, father.rightSon);
        }
        else {
            //创建一个新的节点没有左孩子
            father.rightSon=new BTree();
            father.rightSon.data=data;
            father.rightSon.father=father;
        }
    }
    if (compare<0) {
        //判断有没有左孩子,如果有则递归下一级
        if (father.hasleft()) {
            insert(data, father.leftSon);
        }
        else {
            father.leftSon=new BTree();
            father.leftSon.data=data;
            father.leftSon.father=father;
        }
    }

}

//先序遍历
public static void query1(){
    if (root==null) {
        return;    
    }
    query1(root);
    
}
public static void query1(BTree tree){
    if (tree==null) {
        return;
    }
    System.out.print(tree.data+"  ");
    if (tree.hasleft()) {
        query1(tree.leftSon);
    }
    if (tree.hasright()) {
        query1(tree.rightSon);
    }
}
//中序遍历
public static void query2(){
    if (root==null) {
        return;    
    }
    query2(root);
    
}
public static void query2(BTree tree){
    if (tree==null) {
        return;
    }
    if (tree.hasleft()) {
        query2(tree.leftSon);
    }
    System.out.print(tree.data+"  ");
    
    if (tree.hasright()) {
        query2(tree.rightSon);
    }
}
//后序遍历
public static void query3(){
    if (root==null) {
        return;    
    }
    query3(root);
    
}
public static void query3(BTree tree){
    if (tree==null) {
        return;
    }
    if (tree.hasleft()) {
        query3(tree.leftSon);
    }
    if (tree.hasright()) {
        query3(tree.rightSon);
    }
    
    System.out.print(tree.data+"  ");
    
    
}

    public static void main(String[] args) {
           BTree tree = new BTree();
            tree.insert(56);
            tree.insert(23);
            tree.insert(98);
            tree.insert(33);
            tree.insert(54);
            tree.insert(44);
            tree.insert(66);
            tree.insert(53);
            tree.insert(75);
            tree.insert(11);
            tree.insert(32);
            tree.insert(76);
            BTree.query1();
            System.out.println();
            BTree.query2();
            System.out.println();
            BTree.query3();
    }

}

结果为:

56  23  12  54  53  45  32  98  67  76  99  
12  23  32  45  53  54  56  67  76  98  99  
12  32  45  53  54  23  76  67  99  98  56  

猜你喜欢

转载自blog.csdn.net/qq_39404258/article/details/81806082