数据结构与算法java篇--二叉树

这篇博客介绍了如何使用Java实现二叉树数据结构,包括Node类和Tree类的定义,查找、插入、删除节点的操作,以及中序、前序、后序遍历方法。还详细讨论了删除节点的三种不同情况:无子节点、一个子节点和两个子节点的情况。

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

内容有点多,建议先收藏

目录

一.树的介绍

二.java代码实现树

1.Node类

2.Tree类

3.查找节点

4.插入节点  

5.遍历树

        5.1 中序遍历

        5.2 前序遍历和后序遍历

6.查找最大值和最小值

7.删除节点

        7.1 删除没有子节点的节点

        7.2 删除有一个子节点的结点

        7.3 删除有两个节点的节点 

8. 完整的二叉树java代码


一.树的介绍

树由边连接的节点而组成,在图中用圆表示节点,实现表示边

 路径:顺着节点从一个节点到另一个节点的顺序叫做路径

:树顶端的节点叫根

父节点:连接下层节点的上层节点称为父节点,例如B是C,D的父节点

子节点:和父节点相连接的节点

叶节点:没有子节点的节点


二.java代码实现树

1.Node类

Node类是节点对象的类,包含了对象的数据

Node类的实现:

class Node{
    int iData;    //节点的键
    double fData;   //数据
    Node leftChild;   //左节点
    Node rightChild;  //右节点
}

Node类对象还可以指向一个代表数据类型的对象,而不是把数据项直接放在节点中:

class Node{
   person p1;
    Node leftChild;
    Node rightChild;
}
class person{
    int iData;
    double fData;
}

2.Tree类

Tree类是一个数本身的类,Tree类中有查询,删除,插入以及遍历和显示的方法

 Tree类的骨架:

class Tree{
    private Node root;  //根节点
    public void insert(int id,double dd){
        
    }
    public void find(int key){
        
    }
    public void delete(int id){
        
    }
    //.......
}

3.查找节点

规定父节点的左节点小于父节点,右节点小于父节点,在查找是,最先和父节点比较,如果查找的对象小父节点就在父节点的左节点查找,反之在右节点查找,如此类推,直到找到

查找代码:

 public Node find(int key){
        Node current=root;
        while(current.iData!=key){
            if(key<current.iData)    //如果小于
                current=current.leftChild;
            else       //如果大于
                current=current.rightChild;
            if (current==null)
                return null;
        }
        return current;
    }

4.插入节点  

插入节点,先查找到插入节点的父节点,如果插入的值大于父节点就插入到右节点,反之插入左节点

 插入操作代码:

 public void insert(int id,double dd){
        Node newNode=new Node();
        newNode.iData=id;
        newNode.dData=dd;
        if (root==null)
            root=newNode;
        else {
            Node current=root;
            Node parent;
            while (true){
                parent=current;
                if(id<current.iData){
                    current=current.leftChild;
                    if (current==null){
                        parent.leftChild=newNode;
                        return;
                    }
                    else {
                        current=current.rightChild;
                        if (current==null){
                            parent.leftChild=newNode;
                            return;
                        }
                    }
                }
            }
        }
    }
    

5.遍历树

遍历树就是按顺序访问树的每一个节点,遍历有分为中序遍历,前序遍历和后序遍历

5.1 中序遍历

图解中序遍历:

 从节点开始沿左边画路径线,当路径线结果节点正下方时该结点被遍历,如图遍历结果:20,30,40,50,60

中序遍历代码:

 public void inOrder
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

前段被迫创业

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

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

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

打赏作者

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

抵扣说明:

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

余额充值