题目大意: 给树上每一个结点赋值,要求相邻结点的权值不能相同。问树上最小权值和。 设$f[i][j]$表示以$i$为根的子树,根权值为$j$时子树的最小权值和。 朴素的$DP$是$n^3$的。这里我们有个结论:树上用到的颜色不超过$\log_{2} n$个。下面给出我的浅解: ...
分类:
其他好文 时间:
2020-05-17 16:05:21
阅读次数:
65
并查集: 1.将两个集合合并。 2.询问两个元素是否在一个集合当中。 基本原理:每个集合用一颗树来表示。树根的编号就是整个集合的编号。每个节点存储他的父亲节点,p[x]表示x的父亲节点。 问题1:如何判断树根:if(p[x]==x); 问题2:如何求x的集合的编号:while(p[x]!=x) x= ...
分类:
其他好文 时间:
2020-05-17 15:56:54
阅读次数:
45
问题: 输入两棵二叉树A,B,判断B是不是A的子结构。(ps:我们约定空树不是任意一个树的子结构) 分析: 1、子树的两种形式: (1)子树位于左孩子或右孩子枝,及B是A的左孩子或右孩子。 (2)两棵树拥有相同的根节点,子树更短。 2、判断过程: (1)父亲树依次寻找与子树根节点相同的节点,将找到的 ...
分类:
其他好文 时间:
2020-05-15 09:16:08
阅读次数:
60
为了防止二叉搜索树中性能大大降低的最坏情况出现,我们可以采用一些方法,如:随机化、分期化和最优化来使其达到平衡。 下面函数使用分区函数在线性时间内使一棵二叉搜索树达到完美平衡状态。我们先划分以便把中值节点放入树根,然后(递归地)对子树执行同样的操作。 1 void balanceR(link& h) ...
分类:
其他好文 时间:
2020-05-13 09:32:37
阅读次数:
45
在一个二叉搜索树中删除带有给定关键字的节点。这个删除操作的实现删除在BST中遇到的第一个带有给定关键字v的节点。它从上向下处理,为适当的子树作递归调用,直到要删除的节点位于树根处。然后,它用两棵子树结合的结果取代该节点--右子树中最小的节点成为树根,接着把它的左链接设置成指向左子树。 1 priva ...
分类:
其他好文 时间:
2020-05-13 09:18:33
阅读次数:
52
定义: 组合模式(Composite):将对象组合成树形结构以表示“部分-整体”的层次结构。组合模式使得用户对单个对象和组合对象的使用具有一致性。当你发现需求中是体现部分与整体层次的结构时,以及你希望用户可以忽略组合对象与单个对象的不同,统一的使用组合结构中的所有对象时,就应该考虑用组合模式了。 实 ...
分类:
Web程序 时间:
2020-05-03 17:00:00
阅读次数:
69
题目: 解答: 1 /** 2 * Definition for a binary tree node. 3 * public class TreeNode { 4 * int val; 5 * TreeNode left; 6 * TreeNode right; 7 * TreeNode(int ...
分类:
其他好文 时间:
2020-05-03 16:21:26
阅读次数:
53
一、思维导图: 二、重要概念: 1、二叉树的五种基本形态: 2、前、中、后序遍历: 1.1前序遍历 根节点 左子树 右子树 1.2中序遍历 左子树 根节点 右子树 1.3后序遍历 左子树 右子树 根节点 2、ASL计算: 如图所示的二叉排序树,其成功的平均查找长度是 ; 不成功的平均查找长度是 。 ...
分类:
编程语言 时间:
2020-04-26 21:14:49
阅读次数:
70
# Definition for a binary tree node. # class TreeNode: # def __init__(self, x): # self.val = x # self.left = None # self.right = None #先是比较树根左右边的是否相等。 ...
分类:
其他好文 时间:
2020-04-25 01:15:08
阅读次数:
58
题意:给出一棵树,要求给树上的每条边赋权值,使得任意两个叶子节点的路径上所有权值异或之后为0,边数n范围为[3,1e5],求使用的不同权值数的最小值和最大值。 题解: 任取一个叶子节点为树根建树。则题意可转化为 首先考虑最小值 由异或的性质(a^b^b=a,总存在c使得对任意a,b有a^b^c=0) ...
分类:
其他好文 时间:
2020-04-19 10:57:12
阅读次数:
65