Java 实现二叉树

299 篇文章 1 订阅

定义节点类:

package Demo31;

public class TreeNode {
    private TreeNode left;//左子树地址
    private Integer data;//值域
    private TreeNode right;//右子树地址

    @Override
    public String toString() {
        return "TreeNode{" +
                "left=" + left +
                ", data=" + data +
                ", right=" + right +
                '}';
    }

    public TreeNode(Integer data) {
        this.data = data;
    }

    public TreeNode getLeft() {
        return left;
    }

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

    public Integer getData() {
        return data;
    }

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

    public TreeNode getRight() {
        return right;
    }

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

二叉树本体:

package Demo31;


public class Tree {
    private TreeNode root;

    public TreeNode getRoot() {//根节点,得到根节点
        return root;
    }
    public void diguiInsert(TreeNode node, int val) {//插入数据的两种方式
    //这种方式是递归
        TreeNode treeNode = new TreeNode(val);
        if (root == null) {
            root = treeNode;
            return;
        }
        if (val < node.getData() ) {
            if (node.getLeft() == null) {
                node.setLeft(treeNode);
                return;
            } else {
                diguiInsert(node.getLeft(), val);
            }
        } else {
            if (node.getRight() == null) {
                node.setRight(treeNode);
                return;
            } else {
                diguiInsert(node.getRight(), val);
            }
        }
    }

    public void insert(int val) {//这种方式是循环
        TreeNode treeNode = new TreeNode(val);
//        判断 root 是不是空
        if (root == null) {
            root = treeNode;
            return;
        }
        TreeNode temp = root;
        while (true) {
            if (treeNode.getData() >= temp.getData()) {
                if (temp.getRight() == null) {
                    temp.setRight(treeNode);
                    return;
                }
                else temp = temp.getRight();
            } else {
                if (temp.getLeft() == null) {
                    temp.setLeft(treeNode);
                    return;
                }
                temp = temp.getLeft();
            }
        }
    }
    public void preSearch(TreeNode tree) {//前序
        if (tree != null) {
            System.out.println(tree.getData());
            preSearch(tree.getLeft());
            preSearch(tree.getRight());
        }
    }
    public void midSearch(TreeNode tree) {//中序
        if (tree != null) {
            midSearch(tree.getLeft());
            System.out.println(tree.getData());
            midSearch(tree.getRight());
        }
    }
    public void lastSearch(TreeNode tree) {//后序
        if (tree != null) {
            lastSearch(tree.getLeft());
            lastSearch(tree.getRight());
            System.out.println(tree.getData());
        }
    }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

_努力努力再努力_

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

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

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

打赏作者

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

抵扣说明:

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

余额充值