随笔分类 -  数据结构与算法

记录学习、日常工作涉及的数据结构与算法
摘要:二叉树有3种遍历方法:前序、中序、后序 中序 + 前序或中序 + 后序才能唯一确定一棵二叉树。 先找根,然后分左右子树。 然后再分别找左右子树的根、左右子树的左右子树即可 阅读全文
posted @ 2023-11-12 10:24 Allen_Hao 阅读(152) 评论(0) 推荐(0)
摘要:说明 对于将一般树结构转化为二叉树,使用的方法称为“Child-Sibling”(Leftmost-child-next-right-sibling)法则。 步骤 1. 将节点的所有兄弟节点,用横线连接起来 2. 删掉所有与子节点间的链接,只保留与最左子节点的链接 3. 顺时针旋转45度 二叉树转化 阅读全文
posted @ 2023-11-12 10:15 Allen_Hao 阅读(184) 评论(0) 推荐(0)
摘要:线索二叉树 二叉树有些节点没有左子树或没有右子树或左右子树都没有,那么就会存在空链接的情况,为了充分利用空链接,让其指向树的其他节点,这些指向其他节点的链接就是线索,这棵树也变成了线索二叉树。 二叉树变成线索二叉树的步骤 1. 二叉树先根据中序遍历的方式,进行排序(这样节点就直到其前驱节点、后继节点 阅读全文
posted @ 2023-11-11 23:39 Allen_Hao 阅读(629) 评论(0) 推荐(0)
摘要:二叉搜索树 二叉搜索树(Binary Search Tree,BST)是一种基本的数据结构,用于存储和管理有序数据集。它是一种树状结构,其中每个节点都包含一个值,且满足以下性质: 左子树中的所有节点的值都小于或等于该节点的值。 右子树中的所有节点的值都大于该节点的值。 这些性质保证了二叉搜索树的有序 阅读全文
posted @ 2023-11-08 22:26 Allen_Hao 阅读(84) 评论(0) 推荐(0)
摘要:什么是二叉运算树 二叉运算树(Binary Expression Tree),也称为二叉表达式树,是一种数据结构,用于求解数学表达式或算术表达式。它是一种二叉树,其中每个节点表示一个操作符或操作数,并且具有以下特点: 叶子节点(没有子节点)表示操作数,如整数或变量。 内部节点表示操作符,如加法、减法 阅读全文
posted @ 2023-11-07 00:08 Allen_Hao 阅读(501) 评论(0) 推荐(1)
摘要:二叉树遍历的规则 1. 根据根节点(父节点)的位置在最前面、在左子节点、右子节点中间、最后面,分为前序、中序、后序。 2. 除了根(父节点)特殊以外,都是先左节点、后右节点。 前序遍历 1. 一个子树一个子树的看 2. 前序:根(父)--> 左子节点 >子树 ..... -->右子节点 第1个子树: 阅读全文
posted @ 2023-11-05 17:25 Allen_Hao 阅读(78) 评论(0) 推荐(0)
摘要:Java Java中可以使用链表来实现二叉树的存储。 1. 链表实现二叉树的原理: 链表是由节点组成的数据结构,每个节点包含一个数据和指向下一个节点的指针。 在链表中,可以将二叉树的每个节点都看作一个链表节点,同时维护一个指向左子节点的指针和一个指向右子节点的指针。通过这种方式,可以将二叉树的各个节 阅读全文
posted @ 2023-11-05 12:00 Allen_Hao 阅读(204) 评论(0) 推荐(0)
摘要:存储方式 一般使用数组、链表来存储树(节点)。链表的优点就是添加、删除。数组优点是访问(遍历)。 一维数组表示法 首先将二叉树当作一颗满二叉树(Full Binary Tree),因此第K层具有2k-1 个节点。按照规则存放在一维数组中。 原理 对于一个具有n个节点的二叉树,可以使用一个长度为2n的 阅读全文
posted @ 2023-11-02 00:28 Allen_Hao 阅读(309) 评论(0) 推荐(0)
摘要:赫夫曼树概述 HuffmanTree因翻译不同导致其有多个名字:赫夫曼树、霍夫曼树、哈夫曼树 赫夫曼树又称最优二叉树,是一种带权路径长度 最短的二叉树。 所谓树的带权路径长度,就是树中所有的叶结点的权值乘上其到根结点的路径长度(若根结点为0层,叶结点到根结点的路径长度为叶结点的层数)。 树的路径长度 阅读全文
posted @ 2023-10-31 00:22 Allen_Hao 阅读(1446) 评论(0) 推荐(0)
摘要:什么是二叉树(binary tree)? 在树结构的基础上,要求其中每个节点最多有两个子节点(一个节点最多有2个边)。 二叉树由根节点和若干个左子树和右子树构成,这些子树也都是二叉树。二叉树可以为空树,也可以只包含一个根节点。 为什么树形结构常用二叉树呢? 就是为了省空间。n叉树,n越大就需要更多的 阅读全文
posted @ 2023-10-29 15:35 Allen_Hao 阅读(181) 评论(0) 推荐(0)
摘要:什么是树结构? 树(Tree)是一种具有层次性的非线性数据结构。它是由一个或多个节点(Node)组成。每个节点由数据和指针组成。存在一个特殊的节点称为根节点。 除了根节点,其余节点可分为n个互斥的集合,每个集合本身也是一个树结构。 其中A是树根节点,其子节点B、E、K又可以分为3个集合: 第1个集合 阅读全文
posted @ 2023-10-24 00:37 Allen_Hao 阅读(281) 评论(0) 推荐(0)
摘要:概念 双向队列(Double-ends Queues简称Dequeue)是一种前后2端都可以添加数据(入队)、移除(出队)数据的有序线性表。 特点 双向队列(Deque,全名Double Ended Queue)是一种具有两个指针的线性表,允许从两端都可以进行插入和删除操作即双向队列可以在任意一端进 阅读全文
posted @ 2023-10-14 09:24 Allen_Hao 阅读(1741) 评论(0) 推荐(0)
摘要:循环队列 又称为环形队列,有如下4个特点: 在循环队列的定义中规定了两个索引指针:front 和 rear。front 指向第一个有效元素的位置,而rear 可以理解为用来记录队尾元素的下一个位置。 当队列为空时,front == rear; 当队列满时,(rear + 1) % n = front 阅读全文
posted @ 2023-10-11 23:09 Allen_Hao 阅读(2372) 评论(0) 推荐(0)
摘要:1. 什么是队列? 队列是一种特殊的线性表,一般只允许在队列的两端进行操作,队列前端进行删除操作,队列的末尾进行添加操作(双向队列的前端、末尾都可以进行删除、添加操作)。 队列可以用数组或链表实现。主要有两个指针:一个front指向队首元素,一个rear指向队尾元素。 2. 队列常见操作 队列常用的 阅读全文
posted @ 2023-10-08 23:52 Allen_Hao 阅读(424) 评论(0) 推荐(0)
摘要:概念 后序表示法(Postfix Notation)又称为逆波兰表示法(Reverse Polish Notation,RPN),是一种用于表示数学表达式的方法,其中运算符位于它们的操作数之后。 这种表示法非常适合用栈来计算表达式的值,因为它消除了括号的需求,使计算机能够轻松地理解和求解表达式。 例 阅读全文
posted @ 2023-09-27 22:32 Allen_Hao 阅读(140) 评论(0) 推荐(0)
摘要:概念 前序表示法,也称为前缀表示法或波兰表示法(Polish notation),是一种用于表示数学表达式和算术运算的方法。这种表示法的特点是将运算符置于操作数之前,而不是像传统的中缀表示法(例如,2 + 3)将运算符置于操作数之间。前序表示法具有一些优点,尤其在计算机科学和计算器设计中非常有用。下 阅读全文
posted @ 2023-09-25 23:23 Allen_Hao 阅读(156) 评论(0) 推荐(0)
摘要:说明 算术表达式的表示法有多种,其中最常见的包括中缀表达法、前缀表达法和后缀表达法。这些表示法用于表示和求解数学表达式,它们在计算机科学和数学领域都有广泛的应用。 中缀表达法、前缀表达法和后缀表达法是操作符的位置来分类的。操作符位于2个操作之间叫中缀表达法,操作符位于2个操作数之前叫前缀表达法。操作 阅读全文
posted @ 2023-09-24 23:42 Allen_Hao 阅读(389) 评论(0) 推荐(0)
摘要:N-皇后问题是一个经典的计算机科学和数学问题,其目标是在一个N×N的棋盘上放置N个皇后,使得它们彼此之间互不攻击,即没有两个皇后在同一行、同一列或同一斜线上。 这个问题最早由卡尔·弗里德里希·高斯于1850年提出,它在计算机科学领域中被广泛研究,被用作算法和人工智能的基础问题。 问题描述 给定一个N 阅读全文
posted @ 2023-09-19 00:10 Allen_Hao 阅读(262) 评论(0) 推荐(0)
摘要:1. 什么是栈? 栈是一种常见的数据结构,它遵循先进后出(LIFO)的原则。栈可以用来解决很多实际问题,比如函数调用、表达式求值、括号匹配等。 一般使用数组、链表实现栈 2. 特点 栈是一种线性数据结构,由一系列元素组成。 栈的插入和删除操作只能在栈的顶部进行。 栈的顶部元素是最后一个插入的元素,也 阅读全文
posted @ 2023-09-14 23:51 Allen_Hao 阅读(332) 评论(0) 推荐(0)
摘要:说明 链表是数据结构中的线性结构,用于存储一系列元素(节点),其中每个元素都包含一个指向下一个元素的引用。 链表由一组节点组成,每个节点包含两个部分:数据和指向下一个节点的指针(或引用)。 线性结构中对比数组/列表的优势:插入和删除性能较好 涉及的概念: 1. 节点:节点包括2个域,元素域、链接域 阅读全文
posted @ 2023-09-11 23:32 Allen_Hao 阅读(337) 评论(0) 推荐(0)