Java数据结构:初识二叉树

数据结构与算法——二叉树详解java 我们有序数组查找快,可以通过二分查找快速的查找到数据,但是要在有序数组中插入一个数的话,就必须先找到插入数据项的位置,然后将所有插入位置后面的数据项后移以为,给新的数据腾出空间,同时删除数据也是一样的道理,可以知道这样的话是很浪费时间的, 同时另外的一种数据结构——链表,链表的插入和删除很快,我们只需要改变一些引用,但是查找数据就会很慢,因为我们无论查找到什么数据,都需要从链表的第一个数据开始,遍... 阅读详情

目录

前言

树🌳: ​编辑

定义

例子 :

树的相关概念 

 树的表示形式:

代码表示n叉树

二叉树: 

定义:

满二叉树 

完全二叉树 特点

二叉树的性质: 

二叉树的存储:

 


前言

顺序表(ArrayList)、链表(LinkedList)、栈(Stack) 、队列(Queue),我们接触到的线性结构(一个前驱一个后继)已经很多了,现在我们要学习一个非线性结构树形结构。

树🌳:
 

定义

树由节点(Node)和边(Edge)组合而成,其中有一个特定的根节点(Root),其余节点被分成若干个互不相交的子树

一颗树最重要的就是树根,不断从土壤中汲取养分,在主干上分出大大小小的树杈,树杈上点缀着片片叶片。
对于树型结构来说同样,有一个根节点(树根或树干)
                                        一个结点可以延伸出多个节点(树杈)
                                       【 延伸出的结点称为子节点
                                        被延伸的结点称为父节点】
                                        N个节点,N-1 条边

                                        任何一个子节点有且仅有一个父节点
                                        任何一个父节点可以包含多个子节点

例子 :

给大家一个形象的例子:选修高中政治的一定给红楼贾府众人牵过红线吧

宝玉黛玉在现行的婚姻法下能结婚吗?
显然不行   这里荣国公贾源为根
                 贾母是其儿媳是其子节点
                 贾赦,贾政,贾敏 是贾母的子节点
                 黛玉和宝玉是堂兄弟结点有同一个爷节点(贾母)三代旁系血亲不能结婚
一个人只能有一个父亲
却可以有多个兄弟姐妹 

说回正题

树的相关概念 

节点的度:节点拥有的子节数目。例如,若某节点有 3 个子节点,其度为 3
树的度:树中所有节点度的最大值。一棵树中可能有多个节点,树的度由最大的节点度决定
叶子节点/终端结点:度为零的节点  反之为非叶子节点/终端结点
双亲结点/父节点:含有子节点的节点
根节点:一棵树中,没有子节点的节点
节点的层次:从根节点开始定义根为第 1 层,其子节点为第 2 层,依此类推,层次从顶至底递增
树的高度/深度:树节点的最大层次
兄弟节点:具有相同的父节点
堂兄弟节点:父节点在同一层次的节点互称堂兄弟,具有同一个爷节点
节点的祖先:从根节点到该节点所经分支上的所有节点
子孙:根节点以外的所有节点
森林:由多棵互不相交的树组成的集合,可看作删除根节点后各子树构成的森林。

 树的表示形式:

 表示树与表示链表相似

链表:
1. 一个表示是节点的类 —> 每个节点保存一个next
2. 拿到头节点就能拿到后续的节点

数:
1.有一个表示节点的类 
2. 拿到根节点就能拿到后续的节点

代码表示n叉树

双亲表示法

class Node{

     String val;                           // 特定场景使用

     Node parent;

}

孩子表示法

class Node{

     String val;                           // 常用

     List<Node> children;

}

孩子双亲表示法

class Node{

     String val;                           // 常用

     List<Node> children;

     Node parent;

}

孩子兄弟表示法

class Node{

     String val;                          // 特定场景使用

     Node firstChild;

     List<Node> brotherNodes;

}

二叉树: 

定义:

二叉树,任意节点的度,不能超过2

以上四种情况都是二叉树 

满二叉树 

整个树,没有只存在于个分支的情况

 

完全二叉树 
特点
  • 叶子结点位置:叶子结点只可能在最大的两层上出现1。
  • 子树深度关系:对任一结点,如果其右子树的最大层次为 L,则其左子树的最大层次为 L 或 L+1。
  • 结点度数限制:至多只有最下面的两层上的结点度数可以小于 2。
  • 最后一层结点分布:最后一层的结点都集中在该层最左边,右边的若干结点可以缺失1。

二叉树的性质: 

1.若规定根节点的层数为1,则一颗非空二叉树的第i层上最多有2^(i-1)个节点(i > 0)。
2.若规定只有根节点的二叉树的深度为1,则深度为K的二叉树的最大节点数 2^k - 1。
3.对任何一棵二叉树,如果对其节点个数为N0,度为2的非叶节点个数为N2,则有N0=N2+1。
4.具有N个节点的完全二叉树的深度 K 为log2(N+1),(以2为底)向上取整。
5.对于具有N个节点的完全二叉树,如果按照从上至下,从左至右的顺序对所有节点从0开始编号,则对于序号为 i 的节点有:
       若 i > 0, 双亲序号:(i - 1)/ 2;  i = 0, i为根节点编号,无双亲节点
       若 2i + 1 < n, 左孩子序号:2i + 1, 否则无左孩子
       若 2i + 2 < n, 右孩子序号:2i + 2, 否则无右孩子

二叉树的存储:

孩子表示法

存储二叉树只需要将左右孩子的引用指向其对应的孩子


class Node {                                     // 某个节点只有左子树,没有右子树

       String val;                                                      right == null;

       Node left;   // 右子树

       Node right; // 左子树

}

// 表示一个二叉树的节点
class Node {
    public String val;
    public Node left;
    public Node right;

    public Node(String val){
        this.val = val;
        this.left = null;
        this.right = null;
    }
}

// 可以通过一个根节点,就能拿到整个树了
// 既可以用 Node root 表示
// 也可以创建一个新的类,在类中持有上述的 Node root
class Tree{
    public Node root;
}


public class Test {
    public static Node createTree(){
        // 简单粗暴
        // 先创建出所有的节点
        Node a = new Node("A");
        Node b = new Node("B");
        Node c = new Node("C");
        Node d = new Node("D");
        Node e = new Node("E");
        Node f = new Node("F");
        Node g = new Node("G");

        // 把这些节点(引用赋值)连起来
        a.left = b;
        a.right = c;
        b.left = d;
        b.right = e;
        c.right = f;
        e.left = g;

        return a;
    }
    // root 表示一棵树
    //Node root = new Node("A");

    // 也可以表示一个树, 日常工作更常见
    //Tree tree = new Tree();


 

初一十五的月亮  天天变的不一样  原来所谓地久天长  也只是误会一场

那首歌我慢慢唱  你问我爱你有多深  我爱你有几分

—— 月亮代表谁的心 DT

🌟💗🦀

Java数据结构之树和二叉树 现在开始学习新的数据结构–树(树形结构) 它是重要的非线性数据结构,区别之前学习的链表和栈者(这些是一对一的线性结构),树是一对多结构。 从定义开始: 树(Tree)是n(n>=0)个节点的有限集合。 在任意一棵非空树中有 有且只有一个特定的节点称为根(Root) 当n大于1的时候,其余节点可以分为m(m>0)个互不相交的有限集合T1,T2,T3,… Tm;其中每个集合本身又可以是一棵树,称为子树。 有关树(Tree)的的相关术语: 节点(Node):包一个数据元素以及指向其他子树的指针(分 阅读详情

相关推荐

vtk相机_分别用 VTK 体绘制和面绘制来实现医学图像三维重建;

序言,VTK介绍:VTK 全称为 The Visualization Toolkit (可视化工具),是一个开源、跨平台、自由获取、支持并行计算的图形应用函数;拥有3D 渲染的最新工具、提供3D交互模式以及2D绘图等。VTK 包含一个C++类库,目前提供了众多语言接口,例如 Java、Python、TCL;在三维函数库OpenGL 的基础上采用面向对象设计方法发展起来图形学基本概念和数据...

weixin_39665302的博客 689

java 二叉树_(java实现)数据结构(二):二叉树初识(构建、遍历)

树存储不同于数组和链表的地方在于既可以保证数据检索的速度,又可以保证数据插入删除修改的速度,二者兼顾。二叉树是一种很重要的数据结构,是非线性的结构,非常多其他数据结构都是基于二叉树的基础演变而来的。如:一般二叉树、完全二叉树、满二叉树、线索二叉树、哈夫曼树、二叉排序树、平衡二叉树、红黑树、B树。普通的二叉树,很难构成现实的应用场景,但因其简单,常用于学习研究,平衡二叉树则是实际应用比较多的。常见于...

weixin_39786155的博客 91

Arduino平台软硬件原理及使用——Arduino Uno板卡的使用

Arduino Uno板卡的基本使用

洪博hopes的博客 4175

遍历同辈节点的方法_(java实现)数据结构(二):二叉树初识(构建、遍历)...

树存储不同于数组和链表的地方在于既可以保证数据检索的速度,又可以保证数据插入删除修改的速度,二者兼顾。二叉树是一种很重要的数据结构,是非线性的结构,非常多其他数据结构都是基于二叉树的基础演变而来的。如:一般二叉树、完全二叉树、满二叉树、线索二叉树、哈夫曼树、二叉排序树、平衡二叉树、红黑树、B树。普通的二叉树,很难构成现实的应用场景,但因其简单,常用于学习研究,平衡二叉树则是实际应用比较多的。常见于...

weixin_42356331的博客 101

设计空间探索:乘法器设计的面积、延时、功耗优化

4-2压缩器在减少延迟方面表现出色,适用于需要快速压缩的场景。6-2压缩器在资源占用方面具有优势,能够减少压缩树的层次数量和逻辑门数量。优化功耗:通过合理组合不同类型的压缩器,可以在延迟、资源占用和功耗之间找到最佳平衡点,从而实现优化的设计目标。###参考资料。

SiArch的博客 1880

道路施工检测 (construction) - 基于Mapillary Vistas数据集的YOLOv11目标检测及UI界面实现

目标检测是计算机视觉的重要任务,目标是识别图像中的目标物体类别及其位置(用边界框表示)。两阶段检测器:如Faster R-CNN,准确度高但速度较慢单阶段检测器:如YOLO系列、SSD,速度快且精度相对较好,适合实时场景数据量:约25,000张高分辨率街景图标注类型:语义分割、实例分割、多类别检测类别示例:construction, road, car, person, traffic sign等格式:COCO风格JSON标注。

YOLO 497

【Java数据结构】初识二叉树

本章介绍了数据结构中的二叉树的一些基本特点,以及用代码模拟实现四种遍历方式,和一些常见的基本操作

yican2580的博客 1779

【CanMV K210】AI 视觉 MNIST 手写数字识别与分类推理

本文介绍了基于CanMV K210开发板的MNIST手写数字识别实验。实验通过摄像头采集图像,经过开窗、灰度化、缩放、反色等预处理后,使用KPU神经网络加速器运行MNIST分类模型,最终在LCD上显示识别结果。重点讲解了分类模型与检测模型的区别、图像预处理流程以及KPU推理结果的解析方法。实验帮助理解从图像采集到分类输出的完整AI视觉处理链路,并提供了调试思路和硬件连接说明。

Mr数据杨 366

Java数据结构——二叉树

本文介绍了Java数据结构中的非线性结构,二叉树的概念以及题目练习

2401_89019969的博客 1637

第 5 篇:责任链模式 (Chain of Responsibility) —— 协议栈的流水线

本文介绍了责任链模式在嵌入式通信协议解析中的应用。针对传统"面条式"代码维护困难的问题,提出将各协议解析器解耦为独立处理单元,通过链表形式串联。文章详细展示了模式实现:定义抽象处理者接口、实现具体协议处理器、构建链表管理器。该方案具有内存占用低(O(1)栈空间)、可动态扩展、支持优先级调整等优势,并探讨了性能优化策略及动态插件系统等扩展应用,为嵌入式通信协议处理提供了清晰的架构方案。

一路往蓝-Anbo 的博客 179

Linux | Ubuntu18.04安装WIFI6 AX201驱动完整教程

本节介绍了如何在Ubuntu18下安装AX201驱动的教程。

九七的博客 8882

数据结构-5.Java. 二叉树

本篇博客给大家带来的是二叉树的知识点, 其中包括面试经常会提问的真题 ArrayList 和 LinkedList 的区别 .文章专栏:Java-数据结构若有问题 评论区见如果你不知道分享给谁,那就分享给薯条。你们的支持是我不断创作的动力 .

薯条不要番茄酱的博客 3114

麒麟操作系统安装教程(保姆级)

本文介绍了如何在VM中安装麒麟操作系统,文章详细的介绍了麒麟操作系统按钻过步骤。

啊渊的专栏 1万+

【Java & 数据结构】初识二叉树

树是一种非线性的数据结构, 也就是说它和我们前面学习的顺序表链表之类的不太一样. 那些数据结构要求中间的元素都只有一个前驱和后继, 而树型结构的中间元素则允许有多个后继.例如下面这个就是一个树形结构为什么叫这种结构为树形结构呢?这是因为它的结构长的就像一颗倒过来的树, 最上面是树根, 最下面则是叶子.下面我们看几个例子, 来认识一下树形结构的注意点下面的这个结构, 就不是一个树形结构, 原因是其中间在同一层的节点, 是不可以相连的, 中间的节点只允许和上层节点和下层节点进行连接.

qq_42150700的博客 904

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

java 数据结构 二叉树

树是一种非线性的数据结构,它是由n(n>=0)个有限结点组成一个具有层次关系的集合。把它叫做树是因为它看 起来像一棵倒挂的树,也就是说它是根朝上,而叶朝下的。它具有以下的特点:有一个特殊的结点,称为根结点,根结点没有前驱结点

N_0050的博客 1036

温度PID控制PLC程序

温度PID稳定控制程序,适用于欧姆龙PLC,对其他PLC也具有很大参考价值

【java数据结构】二叉树

二叉树

2303_77535762的博客 1401

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

【JAVA-数据结构】二叉树

这篇是二叉树相关内容。

Mr_star_galaxy的博客 1570

数据结构(二叉树)——Java实现

认识二叉树,并用Java实现其一系列的操作。

m0_56911284的博客 3086

【Java数据结构】二叉树

1.2.3.4.

2401_83227065的博客 1209

数据结构(Java)——二叉树

本文主要讲二叉树的概念、专业术语、遍历和一些其他的操作

wx2023_10_15的博客 2122

数据结构 | 二叉树遍历(Java)

二叉树的节点定义

xxzaa的博客 1119

数据结构的Java实现——二叉树

二叉树的二叉链表实现、先序、中序、后序遍历实现

山顶冻人的专栏 1万+

【数据结构】 二叉树

二叉树的相关操作和OJ题

qq_56251766的博客 1212

数据结构Java05【二叉树概述、二叉树遍历、堆排序、线索二叉树实现及遍历】

P34-4.7顺序存储的二叉树的概述 P35-4.8顺序存储的二叉树的遍历 P36-4.9常用排序算法之堆排序 P37-4.10线索二叉树的概述 P38-4.11线索二叉树代码实现 1、TestThreadedBinaryTree.java 2、ThreadedBinaryTree.java 3、ThreadedNode.java P39-4.12线索二叉树的遍历

upward 1561

Java:数据结构-二叉树

完全二叉树是效率很高的数据结构,有n 个结点的二叉树,当且仅当其每一个结点都与深度为K的满二叉树中编号从0至n-1的结点一一对应时称之为完 比特就业课 全二叉树。二叉树是一种数据结构,其中每个节点最多有两个子节点,称为左子节点和右子节点。每个节点包含数据,以及指向其左子节点和右子节点的指针。: 树的层数由根节点开始计算,根节点是第 1 层,它的子节点是第 2 层,依此类推。: 根节点下面的节点称为子节点,一个节点可以有左子节点和右子节点。: 具有子节点的节点称为其子节点的父节点。希望能对大家有所帮助!

blamep的博客 972
上一篇: 超全面Java中的队列(Queue)
下一篇: Java 遍历二叉树
LL_break
博客等级 码龄2年 187粉丝 18原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值