广告
返回顶部
首页 > 资讯 > 前端开发 > html >什么是二叉树与多叉树
  • 793
分享到

什么是二叉树与多叉树

2024-04-02 19:04:59 793人浏览 独家记忆
摘要

这篇文章主要讲解了“什么是二叉树与多叉树”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“什么是二叉树与多叉树”吧!一、树状结构1、数组与链表数组结构数组存储是

这篇文章主要讲解了“什么是二叉树与多叉树”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“什么是二叉树与多叉树”吧!

一、树状结构

1、数组与链表

数组结构

数组存储是通过下标方式访问元素,查询速度快,如果数组元素是有序的,还可使用二分查找提高检索速度;如果添加新元素可能会导致多个下标移动,效率较低;

链表结构

链表存储元素,对于元素添加和删除效率高,但是遍历元素每次都需要从头结点开始,效率特别低;

树形结构能同时相对提高数据存储和读取的效率。

2、树结构概念

什么是二叉树与多叉树
  • 根节点:树的根源,没有父节点的节点,如上图A节点;

  • 兄弟节点:拥有同一父节点的子节点。如图B与C点;

  • 叶子节点:没有子节点的节点。如图DEFG节点;

  • 树的高度:最大层数,如图为3层;

  • 路径:从root根节点找到指定节点的路线;

树形结构是一层次的嵌套结构。一个树形结构的外层和内层有相似的结构,所以这种结构多可以递归的表示。经典数据结构中的各种树状图是一种典型的树形结构:一颗树可以简单的表示为根,  左子树, 右子树。 左子树和右子树又有自己的子树。

二、二叉树模型

什么是二叉树与多叉树

树的种类有很多,二叉树(BinaryTree)是树形结构的一个重要类型,每个节点最多只能有两个子节点的一种形式称为二叉树,二叉树的子节点分为左节点和右节点,许多实际问题抽象出来的数据结构往往是二叉树形式。

完全二叉树

什么是二叉树与多叉树

二叉树的所有叶子节点都在最后一层或者倒数第二层,而且最后一层的叶子节点在左边连续,倒数第二 层的叶子节点在右边连续,我们称为完全二叉树

满二叉树

什么是二叉树与多叉树

当二叉树的所有叶子节点都在最后一层,并且结点总数= 2^n -1 , n 为层数,则称为满二叉树。

平衡二叉树

什么是二叉树与多叉树

平衡二叉树指的是,任意节点的子树的高度差的绝对值都小于等于1,并且左右两个子树都是一棵平衡二叉树,常见的符合平衡树的有,B树(多路平衡搜索树)、AVL树(二叉平衡搜索树)等。

二叉查找树

什么是二叉树与多叉树

二叉查找树(BinarySearchTree)不但二叉树,同时满足一定的有序性:节点的左子节点比自己小,节点的右子节点比自己大。

三、二叉树编码

1、基础代码

节点代码

class Treenode {     private String num ;     private TreeNode leftNode ;     private TreeNode rightNode ;     public TreeNode(String num) {         this.num = num;     }    @Override     public String toString() {         return "TreeNode{num=" + num +'}';     }}

树结构代码

class BinaryTree01 {     private TreeNode root ; }

2、遍历与查找

前序遍历查找

先处理当前结点的数据,再依次递归遍历左子树和右子树;

public void prevTraverse() {     // 输出父结点     System.out.println(this);     // 向左子树递归前序遍历     if(this.leftNode != null) {         this.leftNode.prevTraverse();     }    // 向右子树递归前序遍历     if(this.rightNode != null) {         this.rightNode.prevTraverse();     }}public TreeNode prevSearch(String num) {    //比较当前结点     if(this.num.equals(num)) {         return this ;     }    // 递归遍历左子树查找     TreeNode findNode = null;     if(this.leftNode != null) {         findNode = this.leftNode.prevSearch(num);     }    // 左子树遍历命中     if(findNode != null) {         return findNode ;     }    // 递归遍历右子树查找     if(this.rightNode != null) {         findNode = this.rightNode.prevSearch(num);     }    return findNode ; }

中序遍历查找

先递归遍历左子树,再处理父节点,再递归遍历右子树

public void midTraverse() {     // 向左子树递归中序遍历     if(this.leftNode != null) {         this.leftNode.midTraverse();     }    // 输出父结点     System.out.println(this);     // 向右子树递归中序遍历     if(this.rightNode != null) {         this.rightNode.midTraverse();     }}public TreeNode midSearch(String num) {    // 递归遍历左子树查找     TreeNode findNode = null;     if(this.leftNode != null) {         findNode = this.leftNode.midSearch(num);     }    if(findNode != null) {         return findNode ;     }    // 比较当前结点     if(this.num.equals(num)) {         return this ;     }    // 递归遍历右子树查找     if(this.rightNode != null) {         findNode = this.rightNode.midSearch(num);     }    return findNode ; }

后序遍历查找

先递归遍历左子树,再递归遍历右子树,最后处理父节点;

public void lastTraverse() {     // 向左子树递归后序遍历     if(this.leftNode != null) {         this.leftNode.lastTraverse();     }    // 向右子树递归后序遍历     if(this.rightNode != null) {         this.rightNode.lastTraverse();     }    // 输出父结点     System.out.println(this); }public TreeNode lastSearch(String num) {    // 递归遍历左子树查找     TreeNode findNode = null;     if(this.leftNode != null) {         findNode = this.leftNode.lastSearch(num);     }    if(findNode != null) {         return findNode ;     }    // 递归遍历右子树查找     if(this.rightNode != null) {         findNode = this.rightNode.lastSearch(num);     }    if(findNode != null) {         return findNode ;     }    // 比较当前结点     if(this.num.equals(num)) {         return this ;     }    return null ; }

3、删除节点

如果当前删除的节点是叶子节点,则可以直接删除该节点;如果删除的节点是非叶子节点,则删除该节点树。

public void deleteNode(String num) {     // 判断左节点是否删除     if(this.leftNode != null && this.leftNode.num.equals(num)) {         this.leftNode = null ;         return ;     }    // 判断右节点是否删除     if(this.rightNode != null && this.rightNode.num.equals(num)) {         this.rightNode = null;         return ;     }    // 向左子树遍历进行递归删除     if(this.leftNode != null) {         this.leftNode.deleteNode(num);     }    // 向右子树遍历进行递归删除     if(this.rightNode != null) {         this.rightNode.deleteNode(num);     }}

四、多叉树

什么是二叉树与多叉树

多叉树是指一个父节点可以有多个子节点,但是一个子节点依旧遵循一个父节点定律,通常情况下,二叉树的实际应用高度太高,可以通过多叉树来简化对数据关系的描述。

例如:linux文件系统,组织架构关系,角色菜单权限管理系统等,通常都基于多叉树来描述。

感谢各位的阅读,以上就是“什么是二叉树与多叉树”的内容了,经过本文的学习后,相信大家对什么是二叉树与多叉树这一问题有了更深刻的体会,具体使用情况还需要大家实践验证。这里是编程网,小编将为大家推送更多相关知识点的文章,欢迎关注!

--结束END--

本文标题: 什么是二叉树与多叉树

本文链接: https://www.lsjlt.com/news/84587.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • 什么是二叉树与多叉树
    这篇文章主要讲解了“什么是二叉树与多叉树”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“什么是二叉树与多叉树”吧!一、树状结构1、数组与链表数组结构数组存储是...
    99+
    2022-10-19
  • 完全二叉树和线索二叉树是什么
    完全二叉树和线索二叉树是什么,针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。完全二叉树什么叫完全二叉树呢?在说到完全二叉树之前,我们先说另外一个名词:“满二叉树”。像我们之前...
    99+
    2023-06-20
  • Java中二叉树与N叉树的示例分析
    这篇文章主要介绍了Java中二叉树与N叉树的示例分析,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。题目一 解法class Solution {&...
    99+
    2023-06-29
  • C++树与二叉树实例分析
    这篇“C++树与二叉树实例分析”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“C++树与二叉树实例分析”文章吧。树树的定义Q:...
    99+
    2023-06-30
  • Python中的树与二叉树是怎样的
    Python中的树与二叉树是怎样的,针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。树是一类重要的非线性数据结构,是以分支关系定义的层次结构  定义:  树(tree)是n(n...
    99+
    2023-06-02
  • Java实现多叉树和二叉树之间的互转
    目录前言正文思路分析代码实现总结前言 本文主要介绍如何把一个多叉树转换成二叉树以及把二叉树还原成多叉树。 正文 给出一个多叉树,实现一个函数,这个函数可以把多叉树转成二叉树,再实现一...
    99+
    2023-05-19
    Java 多叉树和二叉树互转 Java 多叉树和二叉树互转
  • C语言数据结构系列篇二叉树的概念及满二叉树与完全二叉树
    链接:C语言数据结构系列之树的概念结构和常见表示方法 0x00 概念 定义:二叉树既然叫二叉树,顾名思义即度最大为2的树称为二叉树。 它的度可以为 1 也可...
    99+
    2022-11-13
  • 什么是平衡二叉树AVL
    什么是平衡二叉树AVL,很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。前言Wiki:在计算机科学中,AVL树是最早被发明的自平衡二叉查找树。在AVL树中,任一节点...
    99+
    2023-06-04
  • C++超详细讲解树与二叉树
    目录树树的定义树的名词解释树的表示树的存储结构二叉树的概念及结构二叉树的概念二叉树的性质二叉树的存储结构顺序存储结构链式存储结构树 树的定义 Q:什么是树 A:树是一种 非线性 的数...
    99+
    2022-11-13
  • Python实现二叉排序树与平衡二叉树的示例代码
    目录前言1. 二叉排序树1.1 构建一棵二叉排序树1.2 二叉排序树的数据结构1.3 实现二叉排序树类中的方法:2. 平衡二叉排序树2.1 二叉平衡排序树的数据结构3. 总结前言 什...
    99+
    2022-11-10
  • 剑指Offer之Java算法习题精讲二叉树与N叉树
    题目一  解法 class Solution { StringBuffer sb = new StringBuffer(); List<String&g...
    99+
    2022-11-13
  • 怎么理解二叉树
    本篇文章为大家展示了怎么理解二叉树,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。大白话讲解二叉树比如现在有个数组,存放了很多用户的名字,需要从这个数组中找到包含指定...
    99+
    2022-10-19
  • 怎么使用二叉树
    这篇文章主要介绍“怎么使用二叉树”,在日常操作中,相信很多人在怎么使用二叉树问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”怎么使用二叉树”的疑惑有所帮助!接下来,请跟着小编一...
    99+
    2022-10-19
  • Python实现二叉树结构与进行二叉树遍历的方法详解
    二叉树的建立 使用类的形式定义二叉树,可读性更好 class BinaryTree: def __init__(self, root): self.key = root sel...
    99+
    2022-06-04
    二叉树 遍历 详解
  • C语言树与二叉树基础全刨析
    目录一、树的概念和结构1.1 树的概念1.2 树的结构 & 相关名词解释1.3 树的表示1.4 树的应用二、二叉树的概念 & 存储结构(重要)2.1 二叉树的概念2....
    99+
    2022-11-13
  • Python二叉树怎么实现
    本篇内容介绍了“Python二叉树怎么实现”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!Python实现二叉树Python实现二叉树可以使用...
    99+
    2023-07-06
  • 怎么用DOM与CSS展示二叉树
    这篇文章主要介绍“怎么用DOM与CSS展示二叉树”,在日常操作中,相信很多人在怎么用DOM与CSS展示二叉树问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”怎么用DOM与CSS...
    99+
    2022-10-19
  • php实现二叉树的方法是什么
    这篇“php实现二叉树的方法是什么”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“php实现二叉树的方法是什么”文章吧。什么是...
    99+
    2023-07-05
  • C语言近万字为你讲透树与二叉树
    目录一、树概念及结构1.1 树的概念1.2 树的相关概念1.3 树的表示二、二叉树概念及结构2.1 概念2.2 特殊的二叉树:2.3 二叉树的性质2.4 二叉树的存储结构1. 顺序存...
    99+
    2022-11-13
  • 怎么用VBS模拟二叉树
    这篇文章给大家分享的是有关怎么用VBS模拟二叉树的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。数据结构知识: 二叉树中序便历可以用来做排序 而VBS里面恰恰就没有现成的排序方法,因此我写了一个用VBS的二叉树,来...
    99+
    2023-06-08
软考高级职称资格查询
推荐阅读
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作