- 浏览: 309353 次
- 性别:
- 来自: 大连
文章分类
- 全部博客 (272)
- java (42)
- c (49)
- 算法 (29)
- 汇编语言 (3)
- 字符集 (3)
- error (3)
- 搜索引擎 (2)
- 互联网 (18)
- linux (12)
- 网络 (20)
- VMWare (1)
- 面试 (7)
- c++ (55)
- 设计模式 (3)
- db (9)
- office (2)
- FS (1)
- rest (3)
- Ajax (2)
- Spring (2)
- Hibernate (3)
- matlab (1)
- load balancing (8)
- 分布式计算 (2)
- 易语言 (1)
- apache tomcat (1)
- 测试 (1)
- 数据结构 (5)
- 数学 (13)
- 服务器 (9)
- 读后感 (4)
- 好书介绍 (1)
- script (3)
- wordpress (2)
- delphi (21)
- pascal (8)
- xml (3)
- 趣味 (1)
- PHP (3)
- python (13)
- DLL (4)
- openGL (8)
- windows (2)
- QT (28)
- django (7)
- jquery (1)
- 数据挖掘 (7)
- nginx (1)
- js (1)
- mac (1)
- hadoop (3)
- 项目管理 (1)
- 推荐系统 (1)
- html (1)
最新评论
-
晴天1234:
related remove:attention.ibus和u ...
UBUNTU的默认root密码是多少,修改root密码 -
美丽的小岛:
美丽的小岛 写道如上配置好就得了。提示没有OpenGl.dll ...
OpenGL学习入门之VS2010环境配置 [转] -
美丽的小岛:
如上配置好就得了。提示没有OpenGl.dll之类的,再增加入 ...
OpenGL学习入门之VS2010环境配置 [转] -
美丽的小岛:
主要是理清哪两个对象之间的关系,是信号与所有槽的关系或者是槽与 ...
QT之DisConnect -
美丽的小岛:
LPCTSTR类型:L表示long指针 这是为了兼容Windo ...
QString与各种字符串之间的转化
/*基本思路是对需要查找的节点赋权值为1,其它节点权值为0.那么只要找到一个节点的左右权值都不为1的点就是需要查找的公共父节点。 */ static class Node { String value; Node left; Node right; } static Node parent; public static int findParent(Node root, Node first, Node second) { if (root == null || parent != null) { // Accelerate check return 0; } int value = 0; if (root == first || root == second) { // find the node value = 1; } value += findParent(root.left, first, second); value += findParent(root.right, first, second); if (value == 2) { // find the common parent of the first and second node parent = root; value = 0; } return value; } /*这种方法可以推广到查到n个节点的公共父节点,对每一个需要查找的节点赋值为1即可 */ /**************************************************************************************/ /*二叉树上任意两个节点的最近公共父节点 /*这个问题有LCA算法但是我还是使用的是递归的解法,后序遍历*/ static bool lca(node *root, int va, int vb, node *&result, node *parent) { int left, right, mid; left = right = mid = 0; //判断左右子树是否有要寻找的节点 if (root->left) left = lca(root->left, va, vb, result, root); if (root->right) right = lca(root->right, va, vb, result, root); //判断当前节点是否是要找的结点 if (root->data == va || root->data == vb) { mid = 1; } if (!result && 2 == left + right + mid ) { if(mid) { result = parent; } result = root; } return left || right || mid; } /*************************************************************************************/ 判断二叉树中两个节点的最低共同父节点 只要找到这样一个节点: 已知的两个节点一个在它的左边子树,一个在它的右边子树; 或者这个节点就是已知的两个节点中的一个,而另一个恰好在它的下面。 */ TREE* CommonFather(TREE *root, TREE *A, TREE *B) { if(root == NULL) return root; if(root == A)//如果找到A,则后面的都不再找了,如果其他分支没找到B,则B必定在A下面 return A; if(root == B)//同上 return B; TREE *leftChild == NULL; TREE *rightChild == NULL; leftChild = CommonFather(root->left, A, B);//返回A,B或结果 rightChild = CommonFather(root->right, A, B);//返回A,B或结果 if(leftChild != NULL && rightChild != NULL)//如果都不为空,则必定一个是A,一个是B; return root; if(leftChild != NULL)//如果不为空,则必定是A或B或结果; return leftChild; if(rightChild != NULL) return rightChild;//如果不为空,则必定是A或B或结果; } /**********整理到最后********************************************************/ TreeNode * getLCA(TreeNode *root,TreeNode *A,TreeNode *B){ if(root==NULL) returm NULL ; if(root==A || root==B) return root ; TreeNode *letf=getLCA(root->left , A, B) ; TreeNode *right=getLCA(root->right , A, B) ; if(left==NULL) return right ; else if(right==NULL) reurn left ; else reurn root ; }
发表评论
-
推荐!国外程序员整理的Java资源大全
2015-12-15 10:14 670本文由 ImportNew - 唐 ... -
jsoup select 选择器
2015-12-09 14:03 985问题 采用CSS或类似jquery 选择器(selecto ... -
xmlbeans问题(深刻)
2015-11-12 23:08 1192运行scomp,路径永远是一个问题; 1.Program ... -
spring配置一个简单的数据连接池(dbcp)
2015-11-12 14:16 8251.文件结构 2.包结构 3.spring.x ... -
java泛型之通配符的使用
2015-11-12 12:15 713转自: http://blog.csdn.net/lone ... -
Ubuntu下安装JDK
2015-05-02 18:42 560安装JDK: 1.下载 http://www ... -
vs2008【断点无效】解决方法
2015-04-13 10:05 792有时候,我们在用vs2008调试的时候,会出现断点无效。如下 ... -
C++模板之特化与偏特化详解
2015-01-07 14:44 838转自:http://www.jb51.net/a ... -
c++中的typename与class<转>
2015-01-07 08:51 831在泛型编程的形参表中,关键字typename和class具有 ... -
traits:Traits技术初探
2015-01-06 12:49 804概述:traits是一种特性萃取技术,它在Generic ... -
POD型别
2015-01-06 12:37 771POD全称Plain Old Data。通俗的讲,一个类或结 ... -
c++核心基础知识(内存管理)
2015-01-04 22:22 708内存管理是C++最令人切 ... -
内存分配器<转>
2015-01-04 22:07 1391题记:内存管理一直 ... -
operator new在C++中的各种写法
2015-01-04 19:27 1212http://blog.sina.com.cn/s/blo ... -
可变参数va_list
2014-12-26 17:45 8851.要在函数中使用参数,首先要包含头文件<stdarg ... -
Apriori算法
2014-12-15 12:56 669http://blog.csdn.net/lizhengn ... -
map注意的两个问题
2014-12-11 14:21 644代码1 void main() { ... -
关于C++ const 的全面总结<转>
2014-11-14 12:56 763C++中的const关键字的用法非常灵活,而使用const ... -
C++DLL编程详解
2014-10-08 19:44 1658DLL(Dynamic Link Library)的 ... -
C++&&QT调试时出现的一些错误
2014-10-08 15:14 790错误 原因 解决 ...
相关推荐
最低公共父节点是指在树中,对于给定的两个节点,它们的最近共同祖先节点。在二叉树中,这个祖先节点必须同时是这两个节点的祖先,并且在路径从根节点到这两个节点的路径中,该节点距离根节点最近。 在上述C++实现...
在本算法中,我们将使用递归方法来查找两个节点的最近公共祖先。具体来说,我们将从树的根节点开始,递归地遍历树,直到找到两个节点的最近公共祖先。 下面是算法的实现代码: ```c Bit *SearchBitree(Bit *T,int a...
在主函数 `main` 中,首先调用 `SetBitree` 创建一个二叉排序树,然后提示用户输入两个节点数据,调用 `SearchBitree` 查找最近公共祖先,并打印结果。 总结起来,这个程序实现了在二叉排序树中查找两个节点最近...
在计算机科学领域,二叉树是一种基础的数据结构,它由节点(或称为顶点)和边构成,每个节点最多有两个子节点,分别被称为左子节点和右子节点。在这个名为"erchashu.c.zip_父节点"的压缩包文件中,包含了一个名为...
正向查找,也称为自底向上查找,是从叶子节点开始,沿着父节点路径向上查找目标节点的过程。在无限级树中,我们从某个特定节点出发,遍历其父节点,直到找到目标节点或到达根节点为止。递归实现正向查找的C#代码示例...
2. 要删除的节点只有一个孩子:将孩子节点提升到父节点的位置。 3. 要删除的节点有两个孩子:这时通常用前驱或后继节点来替换。前驱是该节点的左子树中的最大节点,后继是右子树中的最小节点。在本实现中,只提到了...
`parentObj.children`则是只包含直接子节点的数组,IE7和Firefox对这两个属性的支持有所不同。 通过临近节点获取元素,可以使用`neighbourNode.previousSibling`和`neighbourNode.nextSibling`,分别获取当前元素的...
它的主要特性是任何节点的两个子树的高度最大差别不超过1,这确保了树的平衡性,从而在进行查找、插入和删除等操作时能保持较高的效率。在AVL树中,每个节点都包含一个平衡因子,它是节点左子树的高度减去右子树的...
- 树的每个节点通常包含数据(例如节点值)、指向父节点的指针以及一个子节点列表。 - 使用`map`来存储节点间的父子关系,键是父节点的标识,值是一个`vector`,包含了该父节点的所有子节点。 - 当添加新节点时,...
4. **红色节点的限制**:如果一个节点是红色的,则它的两个子节点必须都是黑色的(即不能出现红色节点相邻的情况)。 5. **黑色节点的数量**:对于任意节点,从该节点到达其每个叶子节点的所有路径上包含的黑色节点...
最低公共祖先是指在树中位于两个给定节点之间并离根节点最近的节点,它同时是这两个节点的祖先。 首先,要解决这个问题,我们需要理解树的基本概念。树是由n(n>=1)个有限节点组成一个具有层次关系的集合。习惯上...
在没有给定任何节点的情况下,找到头节点需要从任意节点开始,然后沿着`nextId`的指向逆向追踪到第一个节点,即头节点。 为了解决这个问题,我们可以创建一个辅助数据结构,例如哈希表(HashMap),来存储节点的`id...
2. **平衡二叉树**:平衡二叉树是一种特殊的二叉搜索树,其中任意两个叶子节点之间的高度差最多为1,确保了查找、插入和删除操作的时间复杂度是O(log n)。常见的平衡二叉树类型有AVL树和红黑树。 - **AVL树**:每...
如果节点有两个子节点,需要找到其右子树中最小的节点(即左子树的最大节点),将这个节点的值复制到待删除节点,然后删除该最小节点。 4. **先序遍历(preOrderTraverse)**:这是对二叉树进行的一种遍历方式,...
每个节点可能有零个或多个子节点,除了一个特殊的节点,称为根节点,它没有父节点。若一个节点的所有子节点都没有子节点,那么这个节点被称为叶子节点。 二叉树是树的一种特殊情况,每个节点最多有两个子节点,分别...
在二叉树中,堂兄弟节点是指具有相同深度但父节点不同的两个节点。给定一个唯一的值二叉树,根节点位于深度0,其子节点位于深度1,以此类推。堂兄弟节点的问题是要判断输入的两个节点值x和y是否对应于一对堂兄弟节点...
它的主要特性是任何节点的两个子树的高度最大差别不超过1,这确保了AVL树在查找、插入和删除操作上的高效性。在AVL树中,平衡因子是每个节点的左子树高度减去右子树高度,其值只能是-1、0或1。 AVL树的插入操作: ...
4. **红色节点的两个子节点都是黑色**:不允许出现连续的两个红色节点作为父子节点,以防止形成一条“红色链”,这会破坏树的平衡。 5. **从任一节点到其所有叶子节点的简单路径上,黑色节点的数量相同**:这个性质...
二叉查找树(Binary Search Tree,BST),也称为二叉排序树,是一种特殊的二叉树数据结构,它的每个节点都包含一个键值、一个指向左子树的指针和一个指向右子树的指针。在二叉查找树中,对于任意节点,其左子树中的...
- **左旋转**:当一个节点(例如A)是其父节点(B)的右子节点,并且B是其祖父节点(C)的左子节点时,可以通过左旋转来调整。左旋转将A提升为C的直接子节点,同时将B放到A的位置,作为A的左子节点。这通常与变色...