在一棵树上 求2个点的最短距离,那么首先利用LCA找到2个点的最近公共祖先
公式:ans = dis(x) + dis(y) - 2 * dis(lca(x,y))
这里的dis(x)指的上x距离根节点的距离
注意一些细节方面,比如数组的越界问题:
#include
#include
#include
#include
using namespace std;
typedef long l...
分类:
其他好文 时间:
2015-07-30 11:20:40
阅读次数:
118
HDU 2586 How far away ?(LCA模板 最近公共祖先啊)...
分类:
其他好文 时间:
2015-07-26 15:47:14
阅读次数:
127
求二叉树中的节点个数
求二叉树中叶子节点的个数
求二叉树的深度
求二叉树第K层的节点个数
递归遍历前序中序后序
非递归遍历前序中序后序层序
1 前序遍历
2 中序遍历
3 后序遍历
4 层序遍历
将二叉查找树变为有序的双向链表
判断两棵二叉树是否结构相同
判断二叉树是不是平衡二叉树
判断二叉树是否是搜索二叉树
求二叉树中两个节点的最低公共祖先节点
求二叉树中节点的最大距离
由前序遍历序列和中序遍历序列重建二叉树...
分类:
其他好文 时间:
2015-07-26 12:41:58
阅读次数:
186
树是数据结构中很重要的一部分,也是各大公司面试常考部分。继树的各种遍历算法之后,今天又整理一下树的常见算法操作。本文包括:1.求节点的最近公共祖先2.树的序列化与反序列化3.已知先序遍历和中序遍历构造二叉树4.已知中序遍历和后序遍历构造二叉树1.求节点最近的公共祖先此题不同的要求有不同的解法如果已知...
分类:
编程语言 时间:
2015-07-25 22:51:17
阅读次数:
207
题目描述:Given a binary search tree (BST), find the lowest common ancestor (LCA) of two given nodes in the BST.According to thedefinition of LCA on Wikipe...
分类:
其他好文 时间:
2015-07-24 22:12:46
阅读次数:
94
比赛的时候以为这是一道动态维护树的中心,看了题解发现自己想错了,公共祖先的题目确实是少
这次学习了一下set
发现有很多使用简便的地方#include
#include
#include
#include
#include
#include
using namespace std;
#...
分类:
其他好文 时间:
2015-07-22 16:09:17
阅读次数:
122
题目意思就是找一棵按上面链接所示的树对应的上面的两个点的最小公共祖先(LCP,Least Common Father),按照比较大小来依次返回自己的父亲节点就行了。具体看代码:getfather(a)函数是找父亲的代码#include #include #include #include...
分类:
其他好文 时间:
2015-07-20 12:42:00
阅读次数:
212
LCA tarjan算法模板题
题意:给一个无根树,有q个询问,每个询问两个点,问两点的距离。
用tarjan离线算法算出每个询问的两点的最近公共祖先
ans[i]=dis[x[i]]+dis[y[i]]-2*dis[z[i]]; // x[i],y[i]分别存储每次询问的两点,z[i]存储这两点的最近公共祖先
#include "stdio.h"
#include "stri...
分类:
编程语言 时间:
2015-07-20 11:05:05
阅读次数:
182
这个题目来讲,应该是在二叉树里面较为容易的题目了。那么如何下手呢?其实对于这样一棵二叉树来讲。我们如何求它们的最低公共父节点呢?假如是要你求5、6的公共父节点,那么是3.啰为什么是3? 因为3的左子树是5,而右子树是6啰。那么7、8的最低公共祖先呢? 1啊,因为1的左子树中有7、而1的右子树中有8啊...
分类:
其他好文 时间:
2015-07-18 22:28:33
阅读次数:
444
LCA 最近公共祖先 小结
以poj 1330为例,对LCA的3种常用的算法进行介绍,分别为
1. 离线tajian
2. 基于倍增法的LCA
3. 基于RMQ的LCA
1. 离线tajian
/*poj 1330 Nearest Common Ancestors
题意:
给出一棵大小为n的树和一个询问(u,v), 问(u,v)的最近公共祖先。
限制:
2 <= n...
分类:
其他好文 时间:
2015-07-16 20:06:15
阅读次数:
181