1. 问题描述 给定一棵二叉搜索树(BST),查找两个节点的最短公共祖先节点。
2. 方法与思路 这是一个简化的LCA问题,由于是二叉搜索树,树的本身就有一定节点,左儿子节点的值小于父节点值,父节点值小于右儿子节点的值。这样我们可以递归查找就可以了,如果当前节点值大于给定两个节点的值就去它的左子树查找,如果当前节点的值小于给定两个节点的值,就去它的右子树查找,否则返回该节点。
/**...
分类:
其他好文 时间:
2015-07-14 13:36:43
阅读次数:
74
树是二叉查找树的情况题目来自LeetCode:https://leetcode.com/problems/lowest-common-ancestor-of-a-binary-search-tree/
Lowest Common Ancestor of a Binary Search Tree Total Accepted: 3402 Total Submissions: 8709 My Subm...
分类:
其他好文 时间:
2015-07-13 12:10:38
阅读次数:
112
题目很好理解,即求一棵二叉树中两个节点的公共祖先。
我的解题思路是使用DFS,求出从根节点到两个待查节点各自的路径,然后从头开始比较两个路径,最后一个相等的节点即为公共祖先节点。完整代码如下。
class Solution {
public:
//DFS代码
void findNode(TreeNode* root, TreeNode* toFind, vector &curPath...
分类:
其他好文 时间:
2015-07-12 09:39:01
阅读次数:
122
题意:给一棵二叉排序树,找p和q的LCA。思路:给的是排序树,那么每个节点必定,大于左子树中的最大,小于右子树种的最小。根据这个特性,找LCA就简单多了。三种情况:(1)p和q都在root左边,那么往root左子树递归。(2)在右同理。(3)一左一右的,那么root->val肯定大于其中的1个,小于...
分类:
其他好文 时间:
2015-07-11 15:05:18
阅读次数:
223
标题来源:POJ 1986 Distance Queries意甲冠军:给你一棵树 q第二次查询 每次你问两个点之间的距离思路:对于2点 u v dis(u,v) = dis(root,u) + dis(root,v) - 2*dis(roor,LCA(u,v)) 求近期公共祖先和dis数组#incl...
分类:
其他好文 时间:
2015-07-09 09:38:58
阅读次数:
122
问题描述
pog在与szh玩游戏,首先pog在纸上画了一棵有根树,这里我们定义1为这棵树的根,然后szh在这棵树中选了若干个点,想让pog帮忙找找这些点的最近公共祖先在哪里,一个点为S的最近公共祖先当且仅当以该点为根的子树包含S中的所有点,且该点深度最大。然而,这个问题是十分困难的,出于szh对pog的爱,他决定只找编号连续的点,即l i
~r i
。
输入描述
若干组数据(不超...
分类:
其他好文 时间:
2015-07-07 22:51:27
阅读次数:
371
1.最近公共祖先:对于有根树T的两个结点u、v,最近公共祖先LCA(T,u,v)表示一个结点x,满足x是u、v的祖先且x的深度尽可能大。2.朴素算法:记录下每个节点的父亲,使节点u,v一步一步地向上找父亲,直到找到相同的“祖先”,即 是所求的答案,时间复杂度O(n)。3.优化算法(倍增法):利用二进...
分类:
其他好文 时间:
2015-07-07 12:57:09
阅读次数:
131
思想:采用非递归后序遍历二叉树b.当找到节点值为x的节点时将栈中所有节点值存放在anorx数组中(如图所示的二叉树,F节点的anorx为“ACF”),当找到节点值为y的节点时将栈中所有节点值存放在anory数组中(对于如图所示的二叉树,E节点的anory为“ACE”),当两个节点均已找到后,通过比较找到他们最近的公共祖先(对于如图所示的二叉树,F和E节点的最近公共祖先为C),对应的算法如下:...
分类:
编程语言 时间:
2015-07-07 01:00:18
阅读次数:
274
管道pipe是UNIX系统IPC进程间通信的最古老形式,并且所有UNIX系统都提供此种通信机制。管道有下面两种局限性:
1、历史上,管道是半双工管道,数据只能在一个方向上流动,某些系统则提供了全双工管道。
2、管道只能在具有公共祖先的进程之间使用。半双工管道虽然有自身的局限性,但仍是最常用的IPC形式。每当你在管道线中键入一个由shell执行的命令序列时,shell为每一条命令单独创建一进程,然...
分类:
系统相关 时间:
2015-07-06 12:21:05
阅读次数:
158
Description给出一个n个节点的有根树(编号为0到n-1,根节点为0)。一个点的深度定义为这个节点到根的距离+1。设dep[i]表示点i的深度,LCA(i,j)表示i与j的最近公共祖先。有q次询问,每次询问给出l r z,求sigma_{l#include#include#include#i...
分类:
其他好文 时间:
2015-07-05 14:53:26
阅读次数:
126