给定一个插入序列就可以唯一确定一棵二叉搜索树。然而,一棵给定的二叉搜索树却可以由多种不同的插入序列得到。例如分别按照序列{2, 1, 3}和{2, 3, 1}插入初始为空的二叉搜索树,都得到一样的结果。于是对于输入的各种插入序列,你需要判断它们是否能生成一样的二叉搜索树。 输入格式: 输入包含若干组 ...
分类:
其他好文 时间:
2019-10-27 20:41:22
阅读次数:
69
BinarySearchTree 二叉搜索树 ? 二叉查找树(Binary Search Tree)。搜索,插入,删除的复杂度等于树高,O(log(n))。 若它的左子树不空,则左子树上所有结点的值均小于它的根结点的值; 若它的右子树不空,则右子树上所有结点的值均大于它的根结点的值; 它的左、右子树 ...
分类:
其他好文 时间:
2019-10-26 22:34:08
阅读次数:
212
额。。。 T1是构造题,画出一棵树然后开始想,可以考虑黑白染色,黑点刚进栈就输出,白点出栈再输出,跳3条边的情况就是从一个点的一个子树跳到另一个的情况。 启发:对于这种构造题,先考虑什么时候可以简单操作(跳两边),什么时候必须用较复杂的操作(跳三边),这样思路就会清晰,写起来也就明了了。 复杂度:$ ...
分类:
其他好文 时间:
2019-10-25 10:22:11
阅读次数:
92
闲话 当我觉得我学习算法刚刚从萌新到入门的时候,一类给定一个区间然后给定一系列操作的题彻底的打击了我,那时我才醒悟,编程路上,我一直是萌新。 前言 啥是线段树? 线段树是一个具有树特性的数据结构,它是一颗二叉搜索树。如下图为区间[1,10]所建立的线段树 将每一个区间序列二分成小区间,线段树就存储小 ...
分类:
其他好文 时间:
2019-10-24 13:41:58
阅读次数:
102
题目描述 输入一棵二叉搜索树,将该二叉搜索树转换成一个排序的双向链表。要求不能创建任何新的结点,只能调整树中结点指针的指向。 解题思路 采用中序遍历遍历二叉树,利用二叉排序树的特性,顺次连接节点,形成双向链表。 C++代码实现 /* struct TreeNode { int val; struct ...
分类:
其他好文 时间:
2019-10-23 11:47:14
阅读次数:
83
const int maxn = 10010; int dfn[maxn]; //第i个点被dfs到次序 int low[maxn]; //二叉搜索树上i所在子数上仍在栈中的最小dfn,low[i]相等的点在一个强连通分量中 bool vis[maxn]; stacks; vectorto[maxn... ...
分类:
其他好文 时间:
2019-10-20 18:08:29
阅读次数:
85
序列化是将数据结构或对象转换为一系列位的过程,以便它可以存储在文件或内存缓冲区中,或通过网络连接链路传输,以便稍后在同一个或另一个计算机环境中重建。 设计一个算法来序列化和反序列化二叉搜索树。 对序列化/反序列化算法的工作方式没有限制。 您只需确保二叉搜索树可以序列化为字符串,并且可以将该字符串反序 ...
分类:
其他好文 时间:
2019-10-20 01:10:48
阅读次数:
93
粗略的学习了一下笛卡尔树 主要是为了平衡树打基础吧 因为关于平衡树 treap 早忘了 splay 不信任复杂度 然后 我能学一种比较简单的树Y 笛卡尔树.这里以建出小根堆为例。描述区间性质的树 可以当成二叉搜索树不过并不平衡因为每次都是选取当前区间最小值当做为根 然后显然根据区间的数的排列不同树的 ...
分类:
其他好文 时间:
2019-10-19 09:40:54
阅读次数:
92
题目描述 输入一个整数数组,判断该数组是不是某二叉搜索树的后序遍历的结果。如果是则输出Yes,否则输出No。假设输入的数组的任意两个数字都互不相同。 题解: 这道题,一开始以为将后序遍历排序后的得到中序遍历,然后利用后序遍历和中序遍历进行二叉树的重组,但是由于后序遍历未必是BST树的,故得到的中序遍 ...
分类:
其他好文 时间:
2019-10-16 00:33:45
阅读次数:
79