java实现二叉树

java实现二叉排序树

起因:
leetcode上的二叉树题一直没法做,二叉树的概念特点啥的都懂,但是没有用代码实现过(以前学习概念的时候用的是c语言,大一被c的头文件劝退过,所以一直都没实操
所以自己写了二叉树的数据结构;
但是对比别人用其他方法实现的二叉树,我这个简直就是白话文!

树节点:

    public class TreeNode {
    public int data;

    public TreeNode left;

    public TreeNode right;
    //无参构造,默认只有一个节点,没有子节点,且这个节点的存储数据为0;
    public TreeNode(int data){
        this.data = data;
        this.left = null;
        this.right = null;
    }
    //有参构造,需要传入这个节点的数据,和左右节点,创建他们之间的联系
    public TreeNode(int data,TreeNode left,TreeNode right){
        this.data = data;
        this.left = left;
        this.right = right;
    }

    public int getData() {
        return data;
    }

    public void setData(int data) {
        this.data = data;
    }

    public TreeNode getLeft() {
        System.out.println(this.data);
        return left;
    }

    public void setLeft(TreeNode left) {
        this.left = left;
    }

    public TreeNode getRight() {
        System.out.println(this.data);
        return right;
    }

    public void setRight(TreeNode right) {
        this.right = right;
    }
}

public class BinaryTree {
    private TreeNode root;

    public TreeNode getRoot() {
        return root;
    }

    public void setRoot(TreeNode root) {
        this.root = root;
    }
    public BinaryTree(){

    }

    public BinaryTree(TreeNode root){
        this.root = root;
    }

insert方法: 把方法定义为了一个静态方法,所以在调用方法的时候,需要传根节点和这个要插如的数据;


```public static void insertTree(TreeNode root,int data ){
        if(data == root.data){
            System.out.println("此数已经在树中存在了,加入失败!!!");
            return;
        }

        if(data<root.data){
            if(root.left==null)
                root.left = new TreeNode(data);
            else {
                insertTree(root.left,data);
            }
        }else {
            if(root.right==null)
                root.right = new TreeNode(data);
            else {
                insertTree(root.right,data);
            }
        }

//前序遍历
    public static void pre_visit(TreeNode root){
        System.out.print(root.data+ " ");
        if(root.left !=null){

            pre_visit(root.left);
        }
        if(root.right !=null){
            pre_visit(root.right);
        }
    }
    //中序遍历
    public static void infix_visit(TreeNode root){
        if(root.left !=null){

            pre_visit(root.left);
        }
        System.out.print(root.data+ " ");
        if(root.right !=null){
            pre_visit(root.right);
        }
    }


    //后序遍历
    public static void post_visit(TreeNode root){
        if(root.left !=null){

            pre_visit(root.left);
        }
        if(root.right !=null){
            pre_visit(root.right);
        }
        System.out.print(root.data+ " ");
    }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值