`
Sharpleo
  • 浏览: 564856 次
  • 性别: Icon_minigender_1
  • 来自: newsk
社区版块
存档分类
最新评论

java数据结构 (两叉树)

阅读更多
   树
一,为什么需要使用树?
    有序数组插入数据项和删除数据项太慢。
    链表查找数据太慢。
    在树中能非常快速的查找数据项,插入数据项和删除数据项。

二,树的结构


                                          树的基本概念
三,路径
    顺着连接节点的边从一个节点到另一个节点,所经过的节点顺序排列称为路径。

四,根
    树最上面的节点称为根节点。一棵树只有一个根。而且从根到任何节点有且只有一条路径。

五,父节点
    每个节点都有一条边向上连接到另一个节点,这个节点就称为是下面这个节点的父节点。

六,子节点
    每个节点都有一条边向下连接到另一个节点,下面的节点就是该节点的子节点。

七,叶子节点
    没有子节点的节点称为叶子节点。

八,子树
    每个节点都可以作为一个子树的根,它和它所有的子节点,子节点的子节点组合在一起就是一个子树。

九,访问
    访问一个节点是为了在这个节点上执行一些操作;如查看节点的数据项。但是如果仅仅是经过一个节点,不认为是访问了这个节点。

十,层
    一个节点的层数是指从根开始到这个节点有多少代。


                                                二叉树
一,二叉树
    树的每个节点最多只能有两个子节点的树,成为二叉树。

二,代码实现二叉树
/* 
 * 二叉树节点 
 */ 
public class Node { 
    //数据项 
    public long data; 
    //左子节点 
    public Node leftChild; 
    //右子节点 
    public Node rightChild; 
 
    /** 
     * 构造方法 
     * @param data 
     */ 
    public Node(long data) { 
        this.data = data; 
    } 
}

/* 
 * 二叉树类 
 */ 
public class Tree { 
    //根节点 
    private Node root; 
 
    /** 
     * 插入节点 
     * @param value 
     */ 
    public void insert(long value) { 
 
    } 
 
    /** 
     * 查找节点 
     * @param value 
     */ 
    public void find(long value) { 
 
    } 
 
    /** 
     * 删除节点 
     * @param value 
     */ 
    public void delte(long value) { 
 
    } 
}



      二叉树操作
一,插入节点。
    从根节点开始查找一个相应的节点,这个节点将成为新插入节点的父节点。当父节点找到后,通过判断新节点的值比父节点的值的大小来决定是连接到左子节点还是右子节点。

二,查找节点。
    从根节点开始查找,如果查找的节点值比当前节点的值小,则继续查找其左子树,否则查找其右子树。

/* 
 * 二叉树节点 
 */ 
public class Node { 
    //数据项 
    public long data; 
    //数据项 
    public String sData; 
    //左子节点 
    public Node leftChild; 
    //右子节点 
    public Node rightChild; 
 
    /** 
     * 构造方法 
     * @param data 
     */ 
    public Node(long data,String sData) { 
        this.data = data; 
        this.sData = sData; 
    } 
 
}

/* 
 * 二叉树类 
 */ 
public class Tree { 
    //根节点 
    public Node root; 
 
    /** 
     * 插入节点 
     * @param value 
     */ 
    public void insert(long value,String sValue) { 
        //封装节点 
        Node newNode = new Node(value,sValue); 
        //引用当前节点 
        Node current = root; 
        //引用父节点 
        Node parent; 
        //如果root为null,也就是第一插入的时候 
        if(root == null) { 
            root = newNode; 
            return; 
        } else { 
            while(true) { 
                //父节点指向当前节点 
                parent = current; 
                //如果当前指向的节点数据比插入的要大,则向左走 
                if(current.data > value) { 
                    current = current.leftChild; 
                    if(current == null) { 
                        parent.leftChild = newNode; 
                        return; 
                    } 
                } else { 
                    current = current.rightChild; 
                    if(current == null) { 
                        parent.rightChild = newNode; 
                        return; 
                    } 
                } 
            } 
        } 
    } 
 
    /** 
     * 查找节点 
     * @param value 
     */ 
    public Node find(long value) { 
        //引用当前节点,从根节点开始 
        Node current = root; 
        //循环,只要查找值不等于当前节点的数据项 
        while(current.data != value) { 
            //进行比较,比较查找值和当前节点的大小 
            if(current.data > value) { 
                current = current.leftChild; 
            } else { 
                current = current.rightChild; 
            } 
            //如果查找不到 
            if(current == null) { 
                return null; 
            } 
        } 
        return current; 
    } 
 
    /** 
     * 删除节点 
     * @param value 
     */ 
    public void delte(long value) { 
 
    } 
 
}

public class TestTree { 
    public static void main(String[] args) { 
        Tree tree = new Tree(); 
        tree.insert(10,"James"); 
        tree.insert(20,"YAO"); 
        tree.insert(15,"Kobi"); 
        tree.insert(3,"Mac"); 
 
        System.out.println(tree.root.data); 
        System.out.println(tree.root.rightChild.data); 
        System.out.println(tree.root.rightChild.leftChild.data); 
        System.out.println(tree.root.leftChild.data); 
 
        Node node = tree.find(3); 
        System.out.println(node.data + ", " + node.sData); 
    } 
}

分享到:
评论

相关推荐

    机械设计两叉固定机sw13可编辑非常好的设计图纸100%好用.zip

    机械设计两叉固定机sw13可编辑非常好的设计图纸100%好用.zip

    修饰离子流在重离子碰撞中:对中等诱导的致辐射的敏感性

    我们认为,当代的喷射子结构技术可能有助于在重离子碰撞中对硬介质诱导的胶子medium致... 最后,我们提出了一个互补的可观察性,即Pb-Pb中的两叉式概率与质子-质子碰撞的比率,并讨论了其对各种能量损失机制的敏感性。

    热门标签:分析角度

    与以前的两叉式子结构计算相比,我们的研究的一个新功能是我们使用三重共线性分裂函数并结合了全次求和,这是由于存在两个相同阶数的mt和m W,在信号射流中。 我们针对背景和信号喷射对各种顶部格进行了领先的对数...

    基于石英增强光声光谱技术的开放光路气体传感系统研究* (2013年)

    该系统用光纤将激光引导至石英音叉两叉指中央,以实现对狭小空间中痕量气体的探测。搭建了实验系统,开展了对常温常压下空气中水蒸气含量的探测来验证该系统的灵敏度及可靠性。得到其归一化噪声系数为7.15×10-7cm-...

    基于Android 7.0与Android Studio的安卓学习.zip

    Android是一种基于Linux内核(不包含GNU组件)的自由及开放源代码的移动操作系统,主要应用于移动设备,如智能手机和平板电脑。该系统最初由安迪·鲁宾开发,后被Google公司收购并注资,随后与多家硬件制造商、软件开发商及电信营运商共同研发改良。 Android操作系统的特点包括: 开放源代码:Android系统采用开放源代码模式,允许开发者自由访问、修改和定制操作系统,这促进了技术的创新和发展,使得Android系统具有高度的灵活性和可定制性。 多任务处理:Android允许用户同时运行多个应用程序,并且可以轻松地在不同应用程序之间切换,提高了效率和便利性。 丰富的应用生态系统:Android系统拥有庞大的应用程序生态系统,用户可以从Google Play商店或其他第三方应用市场下载和安装各种各样的应用程序,满足各种需求。 可定制性:Android操作系统可以根据用户的个人喜好进行定制,用户可以更改主题、小部件和图标等,以使其界面更符合个人风格和偏好。 多种设备支持:Android操作系统可以运行在多种不同类型的设备上,包括手机、平板电脑、智能电视、汽车导航系统等。 此外,Android系统还有一些常见的问题,如应用崩溃、电池耗电过快、Wi-Fi连接问题、存储空间不足、更新问题等。针对这些问题,用户可以尝试一些基本的解决方法,如清除应用缓存和数据、降低屏幕亮度、关闭没有使用的连接和传感器、限制后台运行的应用、删除不需要的文件和应用等。 随着Android系统的不断发展,其功能和性能也在不断提升。例如,最新的Android版本引入了更多的安全性和隐私保护功能,以及更流畅的用户界面和更强大的性能。此外,Android系统也在不断探索新的应用场景,如智能家居、虚拟现实、人工智能等领域。 总之,Android系统是一种功能强大、灵活可定制、拥有丰富应用生态系统的移动操作系统,在全球范围内拥有广泛的用户基础。

    node-v4.6.1-sunos-x86.tar.xz

    Node.js,简称Node,是一个开源且跨平台的JavaScript运行时环境,它允许在浏览器外运行JavaScript代码。Node.js于2009年由Ryan Dahl创立,旨在创建高性能的Web服务器和网络应用程序。它基于Google Chrome的V8 JavaScript引擎,可以在Windows、Linux、Unix、Mac OS X等操作系统上运行。 Node.js的特点之一是事件驱动和非阻塞I/O模型,这使得它非常适合处理大量并发连接,从而在构建实时应用程序如在线游戏、聊天应用以及实时通讯服务时表现卓越。此外,Node.js使用了模块化的架构,通过npm(Node package manager,Node包管理器),社区成员可以共享和复用代码,极大地促进了Node.js生态系统的发展和扩张。 Node.js不仅用于服务器端开发。随着技术的发展,它也被用于构建工具链、开发桌面应用程序、物联网设备等。Node.js能够处理文件系统、操作数据库、处理网络请求等,因此,开发者可以用JavaScript编写全栈应用程序,这一点大大提高了开发效率和便捷性。 在实践中,许多大型企业和组织已经采用Node.js作为其Web应用程序的开发平台,如Netflix、PayPal和Walmart等。它们利用Node.js提高了应用性能,简化了开发流程,并且能更快地响应市场需求。

    node-v6.3.0-linux-armv7l.tar.xz

    Node.js,简称Node,是一个开源且跨平台的JavaScript运行时环境,它允许在浏览器外运行JavaScript代码。Node.js于2009年由Ryan Dahl创立,旨在创建高性能的Web服务器和网络应用程序。它基于Google Chrome的V8 JavaScript引擎,可以在Windows、Linux、Unix、Mac OS X等操作系统上运行。 Node.js的特点之一是事件驱动和非阻塞I/O模型,这使得它非常适合处理大量并发连接,从而在构建实时应用程序如在线游戏、聊天应用以及实时通讯服务时表现卓越。此外,Node.js使用了模块化的架构,通过npm(Node package manager,Node包管理器),社区成员可以共享和复用代码,极大地促进了Node.js生态系统的发展和扩张。 Node.js不仅用于服务器端开发。随着技术的发展,它也被用于构建工具链、开发桌面应用程序、物联网设备等。Node.js能够处理文件系统、操作数据库、处理网络请求等,因此,开发者可以用JavaScript编写全栈应用程序,这一点大大提高了开发效率和便捷性。 在实践中,许多大型企业和组织已经采用Node.js作为其Web应用程序的开发平台,如Netflix、PayPal和Walmart等。它们利用Node.js提高了应用性能,简化了开发流程,并且能更快地响应市场需求。

    node-v6.9.2-darwin-x64.tar.xz

    Node.js,简称Node,是一个开源且跨平台的JavaScript运行时环境,它允许在浏览器外运行JavaScript代码。Node.js于2009年由Ryan Dahl创立,旨在创建高性能的Web服务器和网络应用程序。它基于Google Chrome的V8 JavaScript引擎,可以在Windows、Linux、Unix、Mac OS X等操作系统上运行。 Node.js的特点之一是事件驱动和非阻塞I/O模型,这使得它非常适合处理大量并发连接,从而在构建实时应用程序如在线游戏、聊天应用以及实时通讯服务时表现卓越。此外,Node.js使用了模块化的架构,通过npm(Node package manager,Node包管理器),社区成员可以共享和复用代码,极大地促进了Node.js生态系统的发展和扩张。 Node.js不仅用于服务器端开发。随着技术的发展,它也被用于构建工具链、开发桌面应用程序、物联网设备等。Node.js能够处理文件系统、操作数据库、处理网络请求等,因此,开发者可以用JavaScript编写全栈应用程序,这一点大大提高了开发效率和便捷性。 在实践中,许多大型企业和组织已经采用Node.js作为其Web应用程序的开发平台,如Netflix、PayPal和Walmart等。它们利用Node.js提高了应用性能,简化了开发流程,并且能更快地响应市场需求。

    甲壳虫ADB助手v1.3.0@高级版.apk

    甲壳虫ADB助手v1.3.0@高级版.apk

    机房工程 能源管理 综合运维 大样图.rar

    新旧理念对比:在信息化建设中,数据中心基础设施至关重要,因控制系统数字化,数据中心承载核心组件和数据。目前数据中心资源利用率低,面临节能减排挑战。新型绿色数据中心与传统相比,更注重节能、模块化设计、技术应用和精细化管理,以提高能源效率和减少环境影响。 机房详细设计:省数据机房作为业务处理和数据中心,承担通讯枢纽角色,需保证安全、可靠运行和良好工作环境。依据国家相关政策和标准,设计绿色数据中心机房,包括建筑照明、采暖通风、计算机房用空调机、民用建筑热工设计等规范。 机房设计思路:数据中心发展为高性能计算机集中地,面临能耗效率和资源整合问题。绿色数据中心集成网络设施、服务器、UPS供电等,采用模块化设计,提升机房利用率。 机房总体划分:根据需求和功能,机房划分为主机房区、支持区和辅助区。主机房区包括技侦、刑侦、电话、网监机房等;支持区包括动力电源、发电机房、UPS电源机房等;辅助区包括休息区、监控室等。设计考虑微模块化、空间结构、数据路由和信息点。 机房详细设计:IDC机房建设包括装饰装修、电气系统、弱电集成。装修原则注重防尘、防火、保温、防水和色彩设计。材料选择原则为防火、防水、防静电、不起尘且环保。系统概述包括供配电系统、UPS不间断电源、照明与应急照明、防雷接地等。 数据中心布线系统:基于GB50174-2008和TIA/EIA-942标准,采用光纤与双绞线结合,线缆选型为CMP级电缆,OFNP或OFCP光缆。布线设计采用卡博菲式网格桥架,减轻承重压力,节省空间。 空调新风系统:新型系统采用模块化组合,提高冷气流利用率,智能温感控制,降低PUE值,节能高效。与传统系统相比,具有显著节能优势。 消防自动报警及气体灭火系统:设计为有管网式,包括感烟、感温探测器,声光报警器,紧急启停按钮等。系统实现自动报警、联动控制和手动远程启动。 集中监控管理系统:集成机房动力、环境、安防和服务器系统资源监控,基于WEB远程访问,具备日志和报表管理功能,适合集成监控。 KVM监控管理系统:安装主服务器和交换机,实现全域用户管理和日志服务。系统支持多厂商模拟KVM级联,通过主服务器集群实现统一管理和访问控制。

    node-v6.6.0-linux-arm64.tar.xz

    Node.js,简称Node,是一个开源且跨平台的JavaScript运行时环境,它允许在浏览器外运行JavaScript代码。Node.js于2009年由Ryan Dahl创立,旨在创建高性能的Web服务器和网络应用程序。它基于Google Chrome的V8 JavaScript引擎,可以在Windows、Linux、Unix、Mac OS X等操作系统上运行。 Node.js的特点之一是事件驱动和非阻塞I/O模型,这使得它非常适合处理大量并发连接,从而在构建实时应用程序如在线游戏、聊天应用以及实时通讯服务时表现卓越。此外,Node.js使用了模块化的架构,通过npm(Node package manager,Node包管理器),社区成员可以共享和复用代码,极大地促进了Node.js生态系统的发展和扩张。 Node.js不仅用于服务器端开发。随着技术的发展,它也被用于构建工具链、开发桌面应用程序、物联网设备等。Node.js能够处理文件系统、操作数据库、处理网络请求等,因此,开发者可以用JavaScript编写全栈应用程序,这一点大大提高了开发效率和便捷性。 在实践中,许多大型企业和组织已经采用Node.js作为其Web应用程序的开发平台,如Netflix、PayPal和Walmart等。它们利用Node.js提高了应用性能,简化了开发流程,并且能更快地响应市场需求。

    基于Dagger+RxJava+Retrofit的Android开发框架.zip

    Android是一种基于Linux内核(不包含GNU组件)的自由及开放源代码的移动操作系统,主要应用于移动设备,如智能手机和平板电脑。该系统最初由安迪·鲁宾开发,后被Google公司收购并注资,随后与多家硬件制造商、软件开发商及电信营运商共同研发改良。 Android操作系统的特点包括: 开放源代码:Android系统采用开放源代码模式,允许开发者自由访问、修改和定制操作系统,这促进了技术的创新和发展,使得Android系统具有高度的灵活性和可定制性。 多任务处理:Android允许用户同时运行多个应用程序,并且可以轻松地在不同应用程序之间切换,提高了效率和便利性。 丰富的应用生态系统:Android系统拥有庞大的应用程序生态系统,用户可以从Google Play商店或其他第三方应用市场下载和安装各种各样的应用程序,满足各种需求。 可定制性:Android操作系统可以根据用户的个人喜好进行定制,用户可以更改主题、小部件和图标等,以使其界面更符合个人风格和偏好。 多种设备支持:Android操作系统可以运行在多种不同类型的设备上,包括手机、平板电脑、智能电视、汽车导航系统等。 此外,Android系统还有一些常见的问题,如应用崩溃、电池耗电过快、Wi-Fi连接问题、存储空间不足、更新问题等。针对这些问题,用户可以尝试一些基本的解决方法,如清除应用缓存和数据、降低屏幕亮度、关闭没有使用的连接和传感器、限制后台运行的应用、删除不需要的文件和应用等。 随着Android系统的不断发展,其功能和性能也在不断提升。例如,最新的Android版本引入了更多的安全性和隐私保护功能,以及更流畅的用户界面和更强大的性能。此外,Android系统也在不断探索新的应用场景,如智能家居、虚拟现实、人工智能等领域。 总之,Android系统是一种功能强大、灵活可定制、拥有丰富应用生态系统的移动操作系统,在全球范围内拥有广泛的用户基础。

    tensorflow-gpu-2.2.2-cp38-cp38-win-amd64.whl

    resnet

    企业数字化转型物流信息化咨询项目规划方案qy.pptx

    企业数字化转型物流信息化咨询项目规划方案qy.pptx

    node-v4.7.2-linux-x64.tar.xz

    Node.js,简称Node,是一个开源且跨平台的JavaScript运行时环境,它允许在浏览器外运行JavaScript代码。Node.js于2009年由Ryan Dahl创立,旨在创建高性能的Web服务器和网络应用程序。它基于Google Chrome的V8 JavaScript引擎,可以在Windows、Linux、Unix、Mac OS X等操作系统上运行。 Node.js的特点之一是事件驱动和非阻塞I/O模型,这使得它非常适合处理大量并发连接,从而在构建实时应用程序如在线游戏、聊天应用以及实时通讯服务时表现卓越。此外,Node.js使用了模块化的架构,通过npm(Node package manager,Node包管理器),社区成员可以共享和复用代码,极大地促进了Node.js生态系统的发展和扩张。 Node.js不仅用于服务器端开发。随着技术的发展,它也被用于构建工具链、开发桌面应用程序、物联网设备等。Node.js能够处理文件系统、操作数据库、处理网络请求等,因此,开发者可以用JavaScript编写全栈应用程序,这一点大大提高了开发效率和便捷性。 在实践中,许多大型企业和组织已经采用Node.js作为其Web应用程序的开发平台,如Netflix、PayPal和Walmart等。它们利用Node.js提高了应用性能,简化了开发流程,并且能更快地响应市场需求。

    node-v5.5.0-linux-x86.tar.xz

    Node.js,简称Node,是一个开源且跨平台的JavaScript运行时环境,它允许在浏览器外运行JavaScript代码。Node.js于2009年由Ryan Dahl创立,旨在创建高性能的Web服务器和网络应用程序。它基于Google Chrome的V8 JavaScript引擎,可以在Windows、Linux、Unix、Mac OS X等操作系统上运行。 Node.js的特点之一是事件驱动和非阻塞I/O模型,这使得它非常适合处理大量并发连接,从而在构建实时应用程序如在线游戏、聊天应用以及实时通讯服务时表现卓越。此外,Node.js使用了模块化的架构,通过npm(Node package manager,Node包管理器),社区成员可以共享和复用代码,极大地促进了Node.js生态系统的发展和扩张。 Node.js不仅用于服务器端开发。随着技术的发展,它也被用于构建工具链、开发桌面应用程序、物联网设备等。Node.js能够处理文件系统、操作数据库、处理网络请求等,因此,开发者可以用JavaScript编写全栈应用程序,这一点大大提高了开发效率和便捷性。 在实践中,许多大型企业和组织已经采用Node.js作为其Web应用程序的开发平台,如Netflix、PayPal和Walmart等。它们利用Node.js提高了应用性能,简化了开发流程,并且能更快地响应市场需求。

    42-42.渗透测试-漏洞扫描原理.mp4

    42-42.渗透测试-漏洞扫描原理.mp4

    40-40.XSS跨站脚本攻击植入方式.mp4

    40-40.XSS跨站脚本攻击植入方式.mp4

    4.12作业.sql.sql

    4.12作业.sql.sql

    当提及“奇怪的数列”时,我首先想到的是斐波那契数列和康托尔数列,这两个数列因其独特的生成规则和性质而显得与众不同 以下是关于这两

    当提及“奇怪的数列”时,我首先想到的是斐波那契数列和康托尔数列,这两个数列因其独特的生成规则和性质而显得与众不同。以下是关于这两个数列的500字资源介绍: 斐波那契数列,这是一个充满魅力的数列,它以0和1开始,之后的每一项都是前两项的和。具体地说,斐波那契数列的定义是:F(0) = 0,F(1) = 1,F(n) = F(n-1) + F(n-2),其中n≥2。这个数列的前几项为:0, 1, 1, 2, 3, 5, 8, 13, 21, 34, 55...斐波那契数列的奇特之处在于,许多自然界和人类生活中的现象都与它相关联,比如黄金分割、植物的生长模式等。 而康托尔数列则呈现出另一种独特的风貌。它以1开始,每一项为其前一项的反码。具体定义是:C(1) = 1,C(n) = ~C(n-1),其中n≥2。康托尔数列的前几项为:1, 0, 01, 10, 0110, 1001, 01101001, 10010110...这个数列的奇特之处在于,它每一项都是前一项的二进制反码。这样的定义使得康托尔数列在计算机科学领域中具有着重要的应用,比如数据编码、错误检测等。 这两个数列虽然看似简单,

Global site tag (gtag.js) - Google Analytics