/二叉树的遍历框架/ void traverse(TreeNode root) { //前序遍历:先访问根节点,再前序访问左子树,再访问右子树 traverse(root->left); //中序遍历:先中序访问左子树,再访问根节点,再访问右子树 traverse(root->right); //后 ...
分类:
其他好文 时间:
2020-12-17 13:11:47
阅读次数:
9
623. 在二叉树中增加一行 思路 采用广度优先遍历的方式,同时在遍历的时候记录当前深度,如果深度与d相等,那么就改变当前层次树的结构,遍历完了之后直接return root即可。 需要注意的点是,如果深度为1,则可以直接创立一个新的节点,并把root赋值给树的left节点即可。(这是一个隐藏的坑, ...
分类:
其他好文 时间:
2020-12-16 12:47:50
阅读次数:
3
建一棵trie树,考虑一个串,相当于限制了其子树内部+其到根的链 如果将所有点补全,那么这个问题可以看作每一个极浅(子树内没有其他满足条件)的到根路径以及子树内部没有其他结束点的子树的子问题 对于多个子问题博弈,很明显去求sg,由于是一颗满二叉树,因此只与深度$l$(指该子树深度,与全局的$L$无关 ...
分类:
其他好文 时间:
2020-12-16 11:58:02
阅读次数:
2
一、递归的思路 一个方法在执行时,调用自身被称为“递归”。 递归相当于数学归纳法,有一个起始条件,有一个递推公式。 递归可以分为:单路递归和多路递归(如二叉树和斐波那契数列)。 二、代码举例 1、n的阶乘 //n的阶乘 public static int fac(int num){ if(num = ...
分类:
编程语言 时间:
2020-12-14 12:48:02
阅读次数:
4
515. 在每个树行中找最大值 Difficulty: 中等 您需要在二叉树的每一行中找到最大的值。 示例: 输入: 1 / \ 3 2 / \ \ 5 3 9 输出: [1, 3, 9] Solution Language: **** BFS+queue实现层序遍历,十分easy,一次AC。 # ...
分类:
其他好文 时间:
2020-12-11 12:12:45
阅读次数:
4
###什么是二叉树? 二叉树是n个有限元素的集合,该集合或者为空、或者由一个称为根(root)的元素及两个不相交的、被分别称为左子树和右子树的二叉树组成,是有序树。当集合为空时,称该二叉树为空二叉树。在二叉树中,一个元素也称作一个结点(来源百度百科词条:二叉树) 其他的相关树的知识点,就不再这里阐述 ...
分类:
编程语言 时间:
2020-12-10 11:21:39
阅读次数:
6
深度广度遍历// 根据前序和中序重建二叉树/* function TreeNode(x) { this.val = x; this.left = null; this.right = null;} */function reConstructBinaryTree(pre, vin){ var res ...
分类:
其他好文 时间:
2020-12-09 12:27:49
阅读次数:
10
二叉查找树: 优点:二分查找 缺点:最差情况变成了链表 平衡二叉树: 优点:树的高度差不超过1 缺点:每个节点存储存储的数据太少,每次从磁盘拿数据不够page的16kb,导致树的深度过大(瘦长型)。读不够 多路平衡查找树(B树):分叉数比关键字多1(通过树的合并和分裂来保证新加入的关键字的有序性) ...
分类:
数据库 时间:
2020-12-08 12:34:56
阅读次数:
9
Leetcode 108 将有序数组转换为二叉搜索树 数据结构定义: 将一个按照升序排列的有序数组,转换为一棵高度平衡二叉搜索树。 本题中,一个高度平衡二叉树是指一个二叉树每个节点 的左右两个子树的高度差的绝对值不超过 1。 示例: 给定有序数组: [-10,-3,0,5,9], 一个可能的答案是: ...
分类:
编程语言 时间:
2020-12-05 11:08:08
阅读次数:
9
有了二叉搜索树为什么还要红黑树,以下面几个例子举例,如下面的二叉树可以达到很好的搜索效果 5 7 11 15 19 21 25 26 61 99 再看下面这棵树,我们将下面的数据按从左至右的顺序构造一棵二叉搜索树 15 13 16 11 9 7 5 3 按照之前我们二叉搜索树构建构建的方式,我们将得 ...
分类:
编程语言 时间:
2020-12-03 12:28:09
阅读次数:
15