• 二叉搜索树


    1.需求分析:在n个动态的整数中搜索某个整数?

    解决的方案:

    1.1动态数组:平均时间复杂度为O(n);

    1.2维护一个有序的动态数组,使用二分搜索最坏时间复杂度为O(log n),添加与删除的时间复杂度为O(n);

    1.3使用二分搜索树,最坏的时间复杂度为O(log n)

    2.二分搜索树的特点及优点

    2.1特点:任意一个节点值小于所有右子树节点的值,大于所有左子树节点的值

                    存储的元素必须具有比较性(如果是自定义类型,需要指定比较的方式)

    2.2优点:可以大大提高搜索数据的效率

    3.接口实现

    int size();//元素数量

    boolean isEmpty(); //是否为空

    void clear(); //清空所有元素

    void add(); //添加元素

    void delete();//删除元素

    void contain();//是否包含元素

    注意:此处的二叉树并未使用索引;

    原因:因为二叉搜索树添加元素的顺序与节点的位置无关,并不适合用索引

    4.添加元素

    首先判断根节点是否为空,如果不为空,先添加根节点;

    根节点不为空时添加元素,首先要找到添加位置的根节点,并且判断添加元素与根节点的大小,创建新节点,如果大于,则添加到右子树的节点上;反之则添加到左子树的节点上;

    size++;

    1. public void add(int element){
    2. // elementIsnull(element);
    3. if(root==null){
    4. root=new Node(element,null);
    5. size++;
    6. return;
    7. }
    8. Node node=root;
    9. Node newParent=root;//记录父亲节点
    10. int state=0;//记录一下元素与结点的比较结果;0代表元素大于节点值。1代表相反结果
    11. while (node!=null){
    12. newParent=node;
    13. if(element>node.element){
    14. node=node.right;
    15. state=0;
    16. }else if(element
    17. node=node.left;
    18. state=1;
    19. }else {
    20. node.element=element;
    21. return;
    22. }
    23. }
    24. Node newNode=new Node(element,newParent);
    25. if(state==0){
    26. newParent.right=newNode;
    27. }else {
    28. newParent.left=newNode;
    29. }
    30. size++;
    31. }

    5.二叉树的前序遍历 (注意所有二叉树)

    遍历顺序:遍历根节点——前序遍历左子树节点——前序遍历右子树节点(递归实现)

    1. public void preorderTraversal(Node root){
    2. if(root==null){
    3. return;
    4. }
    5. // 首先遍历根节点
    6. System.out.println(root.element);
    7. // 其次前序遍历左子树
    8. preorderTraversal(root.left);
    9. // 最后前序遍历右子树
    10. preorderTraversal(root.right);
    11. }

    遍历结果:

     

  • 相关阅读:
    (16)Blender源码分析之闪屏窗口的菜单从python加载过程
    跳跃游戏----题解报告
    高校社团管理系统的设计与实现
    【JS高级】js面向对象三大特性之封装—如何创建对象_05
    探讨大型公共建筑能耗监测与信息管理系统研究及应用
    汉泰示波器软件|汉泰示波器上位机软件NS-Scope,任意添加测量数据
    js正则表达式之中文验证(转)
    MySQL的事务概念
    基于MySQL内核的SQL限流设计与实现|得物技术
    推荐 4 个开源工具
  • 原文地址:https://blog.csdn.net/qq_51913153/article/details/127814122