首页 > 其他分享 >数据结构 玩转数据结构 6-4 深入理解递归终止条件

数据结构 玩转数据结构 6-4 深入理解递归终止条件

时间:2022-11-03 20:22:57浏览次数:84  
标签:Node null return 递归 add 玩转 数据结构 root public

0    课程地址

https://coding.imooc.com/lesson/207.html#mid=13456

 

1    重点关注

1.1    代码草图

 

 

 

1.2    二分搜索树添加元素 代码简化

见3.1

 

2    课程内容


 

3    Coding

3.1    二分搜索树添加元素 代码简化

  • 关键代码
//2     循环添加元素,把null也看作节点
    public void add(E e){
        root = add(e,root);
    }

    //3     递归,添加元素
    public Node add(E e,Node root){
        //3.1   终止条件
        if(root==null){
            size++;
            return new Node(e);
        }

        //3.2   递归
        //3.2.1 递归左孩子
        if(e.compareTo(root.e)<0){
            root.left = add(e,root.left);
        }

        //3.2.2 递归右孩子
        if(e.compareTo(root.e)>0){
            root.right = add(e,root.right);
        }

        //点睛之笔
        return root;
    }

 

  • 全量代码
package com.company;

public class BST2<E extends Comparable> {

    //1     内部类
    private class Node{
        //二叉树特有属性
        private Node left,right;
        private E e;
        private Node(E e){
            this.e = e;
            this.left = null;
            this.right = null;
        }
    }

    private int size;
    private Node root;

    public BST2(){
        this.size = 0;
        this.root = null;
    }

    /**
     * 定义基本方法 getSize
     * @author weidoudou
     * @date 2022/11/3 12:57
     * @return int
     **/
    public int getSize(){
        return size;
    }

    /**
     *查询是否为空
     * @author weidoudou
     * @date 2022/11/3 12:58
     * @return boolean
     **/
    public boolean isEmpty(){
        return size == 0;
    }

    //2     循环添加元素,把null也看作节点
    public void add(E e){
        root = add(e,root);
    }

    //3     递归,添加元素
    public Node add(E e,Node root){
        //3.1   终止条件
        if(root==null){
            size++;
            return new Node(e);
        }

        //3.2   递归
        //3.2.1 递归左孩子
        if(e.compareTo(root.e)<0){
            root.left = add(e,root.left);
        }

        //3.2.2 递归右孩子
        if(e.compareTo(root.e)>0){
            root.right = add(e,root.right);
        }

        //点睛之笔
        return root;
    }


}

 

标签:Node,null,return,递归,add,玩转,数据结构,root,public
From: https://www.cnblogs.com/1446358788-qq/p/16855706.html

相关文章

  • 星起航跨境:解决新手小白卖家难题,四个方面教你玩转亚马逊
    大家都知道,现在做跨境电商的利润非常可观,这让很多没有经验的卖家也蠢蠢欲动。跨境电商的平台非常多,优势也各不相同。但是国内卖家大多选择的是亚马逊,亚马逊作为跨境电商头部......
  • 玩转 Gitea | 在 Linux 上安装预编译的 Gitea 程序,配置 systemd 管理服务
    这是一篇介绍手动安装Gitea服务器的用户指南。与之前的容器安装方式相比,对系统资源的要求更低,因此也可以在低功耗的嵌入式Linux设备上配置安装。您可以使用systemd作......
  • 【C语言数据结构】EP1顺序表
    1.什么是顺序表顺序表是用一段物理地址连续的存储单元依次存储数据元素的线性结构,一般情况下采用数组存储。在数组上完成数据的增删查改。顺序表一般可以分为静态表与动......
  • 【数据结构与算法】有向图的拓扑排序
    前言在现实生活中,我们经常会同一时间接到很多任务去完成,但是这些任务的完成是有先后次序的。以我们学习java学科为例,我们需要学习很多知识,但是这些知识在学习的过程中是需要......
  • 【算法与数据结构2】数据结构基础----数组、列表
    一、物理结构数组  数组是存储相同数据类型的元素的一种有序数据结构,通过下标进行存储。查找的时间复杂度为O(1),而删除和添加的时间复杂度为O(n)。其代码实现如下:pu......
  • 玩转Redis集群
    玩转Ridis集群Reids集群模式主从模式哨兵模式(Sentinel)Cluster模式一、主从模式ⅠⅡⅢⅣⅤⅥⅦⅧⅨⅩⅪⅫⅠ、直接配置运行Redis1.1master(主库)#......
  • 用java判断数据结构进出栈的顺序是否正确
    //通过flag判断出栈顺序是否正确importjava.util.*;publicclassE1{  /**   *@paramargsthecommandlinearguments   */  publicstati......
  • 033——常见数据结构
    常见数据结构数据结构概述、栈、队列数组链表二叉树、二叉查找树平衡二叉树红黑树......
  • shell编程之函数以及函数中的递归
    一、什么是函数使用函数可以避免代码重复使用函数可以将大的工程分割为若干小的功能模块,代码的可读性更强类似于Java的方法    二、获取函数的返回值return表......
  • 方法的调用(递归)
    方法System.out.println(),那么它是什么呢?java方法是语句的集合,它们在一起执行一个功能。方法是解决一类问题的步骤的有序组合方法包含于类或对象中方法在程序......