查找二叉树

本文介绍了一种二叉树的实现方式,包括如何在二叉树中插入新节点并保持其特性,以及如何遍历整个二叉树来查看所有已插入的数据。通过具体的Java代码示例,演示了二叉树数据结构的基本操作。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

查找二叉树

首先确定好根节点的数据,以后往树中插入数据,比根节点大的数据往右节点中插入,否则往左节点中插入,如果根节点下的左右节点已经有数据占有的化,则以对应的左右节点作为父节点,创建父节点下新的左右节点,然后根据大小比较,判断插入数据位置,再进行数据插入。以此类推,形成一个树形结构数据。

查找二叉树的实现

class Tree{
    //数据
    private Integer data;
    //左节点
    private Tree left;
    //右节点
    private Tree right;

    public Tree() {
    }

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

    public Integer getData() {
        return data;
    }

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

    public Tree getLeft() {
        return left;
    }

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

    public Tree getRight() {
        return right;
    }

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

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

    /**
     * 二叉树中插入数据
     * @param tree  二叉树对象
     * @param num   插入数据
     */
    public void add(Tree tree,Integer num){
        //插入数据和左节点数据进行比较
        //插入数据比父节点的数据小,则往左节点插入数据
        if (num < tree.getData()){
            //如果树中左节点为空,说明可以插入
            if (tree.getLeft() == null){
                //初始化左节点
                tree.setLeft(new Tree());
                //往左节点中插入数据
                tree.getLeft().setData(num);
            }else {
                //左节点数据不为空,则递归找插入位置
                add(tree.getLeft(), num);
            }
        }
        //插入数据比父节点的数据大,则往右节点插入数据
        else {
            //如果树中右节点为空,说明可以插入
            if (tree.getRight() == null) {
                //初始化右节点
                tree.setRight(new Tree());
                //往右节点中插入数据
                tree.getRight().setData(num);
            }else {
                //右节点数据不为空,则递归找插入位置
                add(tree.getRight(),num);
            }
        }
    }

    /**
     * 遍历树的数据
     * @param tree  需要遍历的树
     */
    public void ergodic(Tree tree){
        //从根节点开始,往左节点中查找数据
        if (tree.getLeft() != null) {
            //左节点不为空,继续递归
            ergodic(tree.getLeft());
        }
        //输出打印
        System.out.println("tree.getData() = " + tree.getData());
        //从根节点开始,往右节点中查找数据
        if (tree.getRight() != null) {
            //有节点不为空,继续递归
            ergodic(tree.getRight());
        }
    }
}

测试类

public class Test {
    public static void main(String[] args) {
    	//创建根节点
        Tree tree = new Tree(10);
        
        //插入数据
        tree.add(tree,8);
        tree.add(tree,12);
        tree.add(tree,14);
        tree.add(tree,9);
        tree.add(tree,6);
        tree.add(tree,11);

		//打印出插入数据后的树
        System.out.println("tree = " + tree);
        
        //遍历树
        tree.ergodic(tree);
    }
}

结果输出

数据插入后,打印树:


为了更加方便观察,转为json格式:
在这里插入图片描述
遍历插入后的树的数据:
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值