java 实现二叉树02

本文介绍了一种用Java实现二叉树的方法,包括构建二叉树、前序遍历、中序遍历和后序遍历等操作。通过创建`IntTreeNode`类表示树节点,并在`ErChaTree`类中实现树的构建和遍历功能。示例代码展示了如何添加元素并进行各种遍历展示。
摘要由CSDN通过智能技术生成

用java实现一个二叉树

这个是我之前写的,感觉比现在这写的完善一点。。。
之前没写注释,名字随便取的。

代码


public class ErChaTree {
    private IntTreeNode overAllNode;
    private int[] array;
    private int number = 0;
    private int[] myArray = new int[10];

    public ErChaTree(){}

    public ErChaTree(int data){
        add(data);
    }

    public ErChaTree(int[] array){
        add(array);
    }

    public void add(int data){
        add1(data);
    }

    private int[] newMyArray(int[] oldArray){
        int[] newMyArray = new int[oldArray.length + 10];
        for(int i = 0;i < oldArray.length;i ++)
            newMyArray[i] = oldArray[i];
        return newMyArray;
    }

    private void add1(int data){
        if(number >= myArray.length)
            myArray = newMyArray(myArray);
        myArray[number ++] = data;
        add(myArray);
    }

    public void add(int[] array){
        add1(array);
    }

    private void add1(int[] array){
        this.array = array;
        overAllNode = buildTree(1,array.length);
    }

    private IntTreeNode buildTree(int n,int max){
        if(n > max)
            return null;
        else{
            IntTreeNode left = buildTree(n*2,max);
            IntTreeNode right = buildTree(n*2+1,max);
            return new IntTreeNode(array[n-1],left,right);
        }
    }

    public void printTree(){
        printTreeShow(overAllNode,0);
    }

    private void printTreeShow(IntTreeNode node,int level){
        if(node != null){
            printTreeShow(node.left,level+1);
            for(int i = 0;i < level;i ++)
                System.out.print("     ");
            System.out.println(node.data);
            printTreeShow(node.right,level+1);
        }
    }

    public void qianXu(){
        System.out.print("前序遍历:");
        qianXu(overAllNode);
        System.out.println();
    }
    private void qianXu(IntTreeNode node){
        if(node != null){
            System.out.print(node.data+" ");
            qianXu(node.left);
            qianXu(node.right);
        }
    }

    public void zhongXu(){
        System.out.print("中序遍历:");
        zhongXu(overAllNode);
        System.out.println();
    }
    private void zhongXu(IntTreeNode node){
        if(node != null){
            zhongXu(node.left);
            System.out.print(node.data + " ");
            zhongXu(node.right);
        }
    }

    public void houXu(){
        System.out.print("后序遍历:");
        houXu(overAllNode);
        System.out.println();
    }
    private void houXu(IntTreeNode node){
        if(node != null){
            houXu(node.left);
            houXu(node.right);
            System.out.print(node.data + " ");
        }
    }

}

public class IntTreeNode {
    public int data;
    public IntTreeNode left;
    public IntTreeNode right;
    public IntTreeNode(){}
    public IntTreeNode(int data){
        this(data,null,null);
    }
    public IntTreeNode(int data,IntTreeNode left,IntTreeNode right){
        this.data = data;
        this.left = left;
        this.right = right;
    }
}


public class test {
    public static void main(String[] args){
        int[] a = new int[]{0,1,2,3,4,5,6,7,8,9};
        //ErChaTree tree = new ErChaTree(a);
        ErChaTree tree = new ErChaTree(0);
        tree.add(1);
        tree.add(2);
        tree.printTree();
        tree.qianXu();
        tree.zhongXu();
        tree.houXu();
    }
}

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

不不树

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值