题意:给你一颗完全二叉树,每条边有一个值,可以对这个值进行加操作,让你满足根节点到所有叶子节点路径值相同 ,问你最少要加多少值。解题思路:从上往下树形DP,位运算会比较方便。解题代码: 1 // File Name: b.cpp 2 // Author: darkdream 3 // Created...
分类:
其他好文 时间:
2015-04-05 21:54:18
阅读次数:
175
B. Om Nom and Dark Park在满二叉树上的某些边上添加一些值。使得根节点到叶子节点的路径上的权值和都相等。求最少需要添加多少。我们利用性质解题。 考察兄弟节点。由于他们从跟节点到父节点这路径是相同的,所以需要添加的值为 2...
分类:
其他好文 时间:
2015-04-05 08:57:38
阅读次数:
240
性质一:在二叉树的第i层上至多有2^(i-1)个结点(i>=1)性质二:深度为k的二叉树至多有2^(k-1)个结点(k>=1)性质三:对任意一颗二叉树T,若终端结点数为n0,而其度数为2的结点数为n2,则 n0=n2+1满二叉树:深度为k,且有2^(k-1)个结点的二叉树。 在满二叉树中,每...
分类:
其他好文 时间:
2015-04-04 22:25:50
阅读次数:
175
堆有最大堆和最小堆之分,最大堆就是每个节点的值都>=其左右孩子(如果有的话)值的完全二叉树。最小堆便是每个节点的值都<=其左右孩子值的完全二叉树。...
分类:
其他好文 时间:
2015-03-31 10:49:09
阅读次数:
148
堆是具有下列性质的完全二叉树:每个结点的值都大于等于其走有孩子节点的值,称为大顶堆;或者每个结点的值都小于等于其走有孩子节点的值,称为小顶堆。
再看堆排序。堆排序就是利用堆(假设是大顶堆)进行排序的方法。它的基本思路是将待排序的序列造成大顶堆。此时,整个序列的最大值就是堆顶的根节点。将他移走(其实就是将其与堆数组的末尾元素交换,此时末尾就是最大值),然后将剩余的n-1序列重新构造成一个堆,这样就...
分类:
编程语言 时间:
2015-03-31 09:14:54
阅读次数:
223
胜者树和败者树都是完全二叉树,是树形选择排序的一种变型。每个叶子结点相当于一个选手,每个中间结点相当于一场比赛,每一层相当于一轮比赛。
不同的是,胜者树的中间结点记录的是胜者的标号;而败者树的中间结点记录的败者的标号。
胜者树与败者树可以在log(n)的时间内找到最值。任何一个叶子结点的值改变后,利用中间结点的信息,还是能够快速地找到最值。在k路归并排序中经常用到。...
分类:
其他好文 时间:
2015-03-30 21:16:18
阅读次数:
173
struct TreeNode{
ElemtType val;
TreeNode *left,*right;
};
1.判定一棵二叉树是否是完全二叉树
借助于层次遍历的算法,将所有结点入队列,包括空结点。出队遇到空结点时,查看其后是否有非空结点,若有,则不是完全二叉树。bool isComplete(TreeNode* root){
TreeNode* Q[Max...
分类:
其他好文 时间:
2015-03-28 23:18:46
阅读次数:
373
定义n个关键字序列Kl,K2,…,Kn称为(Heap),当且仅当该序列满足如下性质(简称为堆性质):(1)ki=号。//k(i)相当于二叉树的非叶子结点,K(2i)则是左子节点,k(2i+1)是右子节点若将此序列所存储的向量R[1..n]看做是一棵完全二叉树的存储结构,则堆实质上是满足如下性质的完全...
分类:
编程语言 时间:
2015-03-28 12:46:19
阅读次数:
191
也有好几天没记录算法学习情况了,这两天看了《算法导论》的第二部分,排序和顺序统计学,记录一下,也顺便增强记忆1.堆排序 就是最大堆和最小堆,用一维数组存储,数据结构是完全二叉树。主要过程分为构建最大/最小堆,插入操作,弹出最大值,取最大/最小值,改变堆中的权值。 构建堆就是从第一个非叶子节点...
分类:
编程语言 时间:
2015-03-21 22:50:14
阅读次数:
215
1、完全二叉树(Complete Binary Tree)的概念若设二叉树的深度为h,除第 h 层外,其它各层 (1~h-1) 的结点数都达到最大个数,第 h 层所有的结点都连续集中在最左边,这就是完全二叉树。完全二叉树是由满二叉树而引出来的。对于深度为K的,有n个结点的二叉树,当且仅当其每一个结点...
分类:
其他好文 时间:
2015-03-20 21:51:51
阅读次数:
122