二叉树
文章平均质量分 73
小锦鲤yaw
天将降大任于斯人也,必先苦其心志,劳其筋骨,饿其体肤,空乏其身,行拂乱其所为,所以动心忍性,曾益其所不能
展开
-
【LeetCode】不同的二叉搜索树(动态规划)
题目要求我们计算出由n个节点组成且节点值从1到n互不相同的二叉搜索树有多少种?我们假设n个结点的个数为SUM(n)令Count(i)为以i为根的二叉搜索树的个数SUM(n) = Count(1) +Count(2) +Count(3) + ...... +Count(n);当i为根节点时,其左子树节点个数为i-1个,右子树节点为n-i;原创 2023-04-05 21:49:21 · 442 阅读 · 2 评论 -
【数据结构】二叉搜索树BST的实现(递归)
二叉搜索树又称二叉排序树,它或者是一棵空树,或者是具有以下性质的二叉树:若它的左子树不为空,则左子树上所有节点的值都小于根节点的值若它的右子树不为空,则右子树上所有节点的值都大于根节点的值它的左右子树也分别为二叉搜索树原创 2023-04-05 17:00:00 · 780 阅读 · 2 评论 -
【LeetCode】填充每个节点的下一个右侧节点指针
题目要求:给定一个完美二叉树,其所有叶子节点都在同一层,每个父节点都有两个子节点。二叉树定义如下:填充它的每个 next 指针,让这个指针指向其下一个右侧节点。如果找不到下一个右侧节点,则将 next 指针设置为 NULL。初始状态下,所有next 指针都被设置为 NULL。原创 2023-04-03 19:27:46 · 269 阅读 · 2 评论 -
【数据结构】二叉搜索树的Java代码实现
二叉搜索树又称二叉排序树,它或者是一棵空树,或者是具有以下性质的二叉树:若它的左子树不为空,则左子树上所有节点的值都小于根节点的值若它的右子树不为空,则右子树上所有节点的值都大于根节点的值它的左右子树也分别为二叉搜索树原创 2023-04-03 17:21:52 · 368 阅读 · 4 评论 -
【数据结构】实现优先级队列
之前我们所学的队列(Queue),队列是一种先进先出的数据类型(First in First out)但是优先级队列虽然名叫队列,却不满足先进先出的条件,更像是数据类型中的堆,优先级队列每次出队的元素都是优先级最高的元素,(优先级的高低需要自己进行定义),比如按照大小定义优先级的高低,那么每次出队的元素都是队列中最大的元素那么我们就可以用堆来实现优先级队列每次将根节点元素弹出,并重新维护堆原创 2023-04-02 16:18:13 · 587 阅读 · 3 评论 -
【LeetCode】前 K 个高频元素(堆)
创建一个哈希表,用其存放数组中出现的元素以及每个元素出现的次数,先创建一个类numOfTimes , 其中有两个属性,一个key值,一个k值出现的次数,写一个类numsSortWayOfTimes继承Comparator方法接口,重写compare方法(对numOfTimes对象进行排序比较的方式---key值出现的次数times的大小),建立一个优先级队列大小为k,存储(元素与出现次数的)numOfTimes的对象遍历队列后就会将出现次数最多的元素对象留在了堆中原创 2023-04-01 21:34:29 · 695 阅读 · 1 评论 -
【七大排序】原地堆排序的实现(Java图解)
我们可以运用堆这个算法对数组进行排序的实现,比如创建一个新的堆,利用堆的add()遍历数组将元素加入堆中,但是这样会增加O(n)的辅助空间,那么有没有一种办法,利用堆使用O(1)的空间就实现数组排序呢?答案当然是有的,就是我们接下来讲的原地堆排序原创 2023-03-31 14:06:31 · 250 阅读 · 5 评论 -
【LeetCode】Morris解法求二叉树的前中后序遍历(带图解)
Morris的整体思路就是将,以某个根节点开始,找到它左子树的最右侧结点之后与当前根节点进行连接,连接之后cur指针可以完整地顺着节点遍历完整个子树,直至为空。原创 2023-03-30 14:38:39 · 300 阅读 · 3 评论 -
【数据结构】堆,堆的建立,插入以及删除(以大堆为例)
1.堆的性质:2.堆的存储方式 2.1大堆和小堆存储示意图3.堆的创建(以大堆为例)1.创建一个线性表用来存放数据2.堆的插入图解:3.堆的删除图解: 2.堆的插入1.先将元素插入到堆的末尾,即最后一个孩子之后2.插入之后如果堆的性质遭到破坏,将新插入的节点顺着双亲往上调整到合适的位置即可 3.堆的删除堆的删除一定删除的是堆顶元素,具体如下: 1.将对顶元素与最后一个元素交换 2.将堆中有效元素个数减少一个 3.对堆顶元素向下调整原创 2023-03-29 18:41:00 · 1577 阅读 · 4 评论 -
【LeetCode】二叉树的最近公共祖先Java
给定一个二叉树, 找到该树中两个指定节点的最近公共祖先。百度百科中最近公共祖先的定义为:“对于有根树 T 的两个节点 p、q,最近公共祖先表示为一个节点 x,满足 x 是 p、q 的祖先且 x 的深度尽可能大(一个节点也可以是它自己的祖先)"示例 1:输入:root = [3,5,1,6,2,0,8,null,null,7,4], p = 5, q = 1输出:3解释:节点 和节点 的最近公共祖先是节点 示例 2:输入:root = [3,5,1,6,原创 2023-03-29 12:46:09 · 159 阅读 · 0 评论 -
【LeetCode】根据序列构造二叉树 (前序中序)(中序后序)
【LeetCode】根据序列构造二叉树 (前序中序)(中序后序)原创 2023-03-29 11:42:31 · 615 阅读 · 0 评论 -
【LeetCode】根据二叉树创建字符串&&二叉树的构建以及遍历(递归)
对于每组数据, 输出将输入字符串建立二叉树后中序遍历的序列,每个字符后面都有一个空格。每个输出结果占一行。右边不为空,则左边需要一个空括号用来占位。输入包括1行字符串,长度不超过100。根节点为空,直接输出一个空字符串。左边不为空,加入左边的值。原创 2023-03-28 15:42:23 · 397 阅读 · 2 评论 -
【LeetCode】二叉树的后序遍历(递归,迭代)
遍历的顺序由从左到右修改为从右到左。判断该节点的右子树有没有被访问过。递归的时候隐式地维护了一个栈。链表来存储节点,并且改为头插。二叉树的前序以及中序遍历。显式地将这个栈模拟出来。原创 2023-03-27 11:46:42 · 785 阅读 · 6 评论 -
【LeetCode】二叉树的中序遍历(递归,迭代,Morris遍历)
Morris 遍历使用二叉树节点中大量指向 null 的指针,将当前根节点的最右侧节点的right指向当前根节点,省去了栈的维护,连接之后可以直接顺着节点遍历完整个二叉树,以下图为例:原创 2023-03-26 11:22:05 · 476 阅读 · 2 评论 -
【LeetCode】二叉树的前序遍历(递归,迭代,Morris 遍历)
Morris 遍历使用二叉树节点中大量指向 null 的指针,将当前根节点的最右侧节点的right指向当前根节点,省去了栈的维护,连接之后可以直接顺着节点遍历完整个二叉树,以下图为例:原创 2023-03-25 22:11:22 · 579 阅读 · 4 评论 -
【数据结构】二叉树的遍历以及基本操作
完全二叉树是效率很高的数据结构,完全二叉树是由满二叉树而引出来的。有一个特殊的结点,称为根结点,根结点没有前驱结点。:若一个结点含有子结点,则这个结点称为其子结点的父结点;二叉树的子树有左右之分,次序不能颠倒,因此二叉树是有序树。n 个结点的二叉树,当且仅当其每一个结点都与深度为K。:一个结点含有的子树的根结点称为该结点的子结点;每棵子树的根结点有且只有一个前驱,可以有。的结点一一对应时称之为完全二叉树。1.手动快速创建一棵简单的二叉树。:从根开始定义起,根为第。:树中结点的最大层次;原创 2023-03-25 12:23:00 · 835 阅读 · 2 评论