二叉树的实现以及相应的功能实现

本文介绍了二叉树的基本概念,包括每个节点最多有两个子树的特性,以及左子树和右子树的概念。通过定义范型类实现二叉树,使用递归方法添加节点,并提供了判断节点是否存在的方法。此外,详细讲解了二叉树的前序遍历,并给出了代码实现和运行结果。
摘要由CSDN通过智能技术生成

今天学习了树这一种数据结构,记录一下。

1.什么是二叉树:

在计算机科学中,二叉树是每个结点最多有两个子树的树结构。通常子树被称作“左子树”(left subtree)和“右子树”(right subtree)。二叉树常被用于实现二叉搜索树二叉堆

2.如何实现二叉树:

首先我们需要先定义一个范型类,这个范型类传进来的参数必须是可比较类型的,不然实现二叉树毫无意义

public class BST<E extends Comparable<E>> {
   

}

然后,我们可以定义一个内部,当然,也可以在其他地方定义类,我这里纯粹是为了容易看。

 private  class  Node {
   
        E e; //节点值
        Node left;//左节点  也可以叫左子树的根节点
        Node right; //右节点  也可以叫右子树的根节点

        public Node(E e) {
    //每生成一个新的节点,他的左子节点和右子节点都应该为空
            this.e = e;
            this.left = null;
            this.right = null;
        }
    }

在这里插入图片描述




理解了上面的定义之后,我们就可以开始定义我们的根节点了
先定义两个变量,第一个是树的根节点,第二个变量用来记录树的节点个数

  private Node root;//根节点
  private int size ; // 节点个数

定义增加节点方法
这里我用递归的形式实现的,因为递归的方式比较简单,也好理解,有更好的办法请大佬们在评论区评论出来。

  public void  add(E e){
    // 根据oop 的封装思想,给顾客调用的都是简单的逻辑,即调用某一个方法,但是,在这一个方法里面又调用了另一个复杂的方法,这个是顾客看不到的,复杂的方法不应该让顾客看见,即只展示结果,不展示过程
           root = add(root,e);//调用另一个递归方法,返回一个全新的根节点
        }
        private Node add(Node node,E e){
   
            if(node == null){
    //如果当前节点为空,直接返回一个新的节点
                size++;
                return new Node(e);
            }                           //相当于return add  但是这里我们应该要返回的是整一个node 所以拿node的右节点来接收
            if(node.e.compareTo(e) < 0) node.right =  add(node.right,e);//如果当前节点的值大于传进来的节点,那么就划分到这个节点的右节点,继续判断(记得一定要拿对应的变量去接收,不然数据会丢失)
            else if(node.e.compareTo(e) > 0) node.left =  add(node.left,e);//如果当前节点的值小于传进来的节点,那么就划分到这个节点的左节点节点,继续判断

            return node;//最后返回这个树所对应的所有节点(根节点)(根节点底下有许多的子节点,组成了树)
        }

判断节点是否存在的方法

 
  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值