二叉搜索树:
二叉树的查找很简单,先序后序中序都可以,一开始要判断是否为空。
插入要判断一下是否存在,查找时同时记录其父节点,然后直到找到空节点,插入。
删除比较复杂一点:
逐一判断:
先判断是否为空,然后查找到要删除的节点p,并记录其父节点q,如果查不到,返回false;
当p节点有两个子树时,查到其中序遍历的后继节点,即排序后的之后以为,记为s。查找的同时记录s的父节点r,然后将s...
分类:
其他好文 时间:
2014-09-18 22:22:54
阅读次数:
278
例题:POJ 1915 Knight Moves 骑士遍历问题(跳马问题)在一个m*m的棋盘上,从任意一个给定的位置(sx , sy)出发,为象棋中的马找一条路通过最少的步数到达另一位置(ex ,ey),输出最少所需要的步数。利用bfs求解。当马在位置(x , y)的时候其后继节点(后继选择)是什么...
分类:
其他好文 时间:
2014-07-29 20:37:12
阅读次数:
275
模板
题意:给你一个图,1总是为根,每个边有单位价值,每个点有权重。
每条边的价值 = sum(后继节点权重)*边的单位价值。
求树的最小价值,即构成一棵树的n-1条边的最小价值。
算法:
1、因为每个边的价值都要乘以后来访问的节点的权重,而走到后来访问的点必经过这条边。
实际上总价值就是 到每个点的最短路径*这个点的权重。
2、但是这个题 数据量真的太大了,50000个点...
分类:
其他好文 时间:
2014-07-09 11:33:57
阅读次数:
273
特点唯一一个头节点唯一一个尾节点除头节点外,均只有一个前驱节点除尾节点外,均只有一个后继节点顺序表插入平均移动步数 n/2删除平均移动步数
(n-2)/2查找时间代价 O(n)二分查找时间代价 O(log2n)适合整块存储有序数据,不适合频繁插入删除以及动态扩展。链接表查找时间代价 O(...
分类:
其他好文 时间:
2014-06-11 08:27:00
阅读次数:
156
利用后继节点的SG值求出当前的SG值。在当前任意一个BLANK插入一个x后,分成两段,于是,看成两段的NIM,异或和,按SG的定义求出当前的SG值即可。
1 #include 2 #include 3 #include 4 #include 5 using namespace std; 6 ...
分类:
其他好文 时间:
2014-06-09 13:37:24
阅读次数:
235
注意:
1 判断一个节点是否平衡的方法
2 平衡一个节点的方法 :
我这里比原文改进一点,独立出一个平衡节点的函数balanceNode(),这样一个函数可以用来平衡插入和删除操作,使得代码更加简洁了。
这样修改之后就使得平衡二叉树好像和一般二叉树的操作比较,就是多了一个平衡操作。
3 删除操作情况很多,很困难,一定要理清思路。十分容易出bug的地方。
这里是查找后继节点的值,填补上到...
分类:
其他好文 时间:
2014-06-05 05:16:45
阅读次数:
261
主要操作为Splay中插入节点,查找前驱和后继节点。 1: #include 2: #include
3: #include 4: using namespace std; 5: #define MaxL 100005 6: #define INF
0x7ffffff 7: #define keyT...
分类:
其他好文 时间:
2014-05-01 14:16:03
阅读次数:
633