#include "btree.cpp" //二叉链的基本运算
#include<iostream>using namespace std;bool allAncestor(BTNode *b, ElemType t)//求所有祖先节点
{if (b == NULL)return false;else if ((b->lchild != NULL && b->lchild->data == t) || (b->rchild != NULL && b->rchild->data == t)){cout<< b->data<<" ";return true;}else if (allAncestor(b->lchild, t) || allAncestor(b->rchild, t)){cout<< b->data<<" ";return true;    }else return false;
}BTNode *nearestAncestor(BTNode *b,ElemType x,ElemType y)//求x和y的最近公共祖先
{if(b==NULL || b->data==x || b->data==y)return b;BTNode *left=nearestAncestor(b->lchild,x,y);BTNode *right=nearestAncestor(b->rchild,x,y);if(left!=NULL && right!=NULL)return b;else if(left!=NULL)return left;//等价于left!=NULL && right==NULLelsereturn right;//等价于left==NULL && right!=NULL或者left==NULL && right==NULL
}int main()
{BTNode *b;ElemType x = 'F', y = 'H';CreateBTNode(b,"A(B(D,E),C(F,G(,H)))");cout<<"二叉树b为:";DispBTNode(b);cout<<endl;cout<<"结点"<<x<<"和"<<y<<"的最近公共祖先为:"<<nearestAncestor(b,x,y)->data<<endl;cout<<"结点"<<y<<"的所有祖先为:";allAncestor(b, y);cout<<endl;return 0;
}

求最近公共祖先和所有祖先相关推荐

  1. 树上倍增法求最近公共祖先LCA

    LCA,最近公共祖先,这个东西有很多作用,因此,如何高效求出LCA就成了一个热点的讨论话题. 下面所有的讨论都以图中这棵树为例子. 先来了解下什么是倍增吧,倍增其实就是二分的逆向,二分是逐渐缩小范围, ...

  2. 树上问题(一)倍增算法求最近公共祖先

    倍增算法求最近公共祖先 一.概述 在图论和计算机科学中,最近公共祖先 LCA(Least Common Ancestors)是指在一个树或者有向无环图中同时拥有v和w作为后代的最深的节点.在这里,我们 ...

  3. LCA 在线倍增法 求最近公共祖先

    第一步:建树  这个就不说了 第二部:分为两步  分别是深度预处理和祖先DP预处理 DP预处理: int i,j;for(j=1;(1<<j)<n;j++)for(int i=0;i ...

  4. 用java实现串匹配问题_java实现字符串匹配问题之求最大公共子串

    转载请注明出处:http://blog.csdn.net/xiaojimanman/article/details/38924981 最近在项目工作中有一个关于文本对比的需求,经过这段时间的学习,总结 ...

  5. java 祖先_java – 家谱祖先查找算法

    我的方法无法通过单元测试.我盯着它看了5个小时是徒劳的.有人可以帮我看看它有什么问题吗? PS:我的代码中的getAllRelations()方法是将格式化的输入分离为字符串ArrayList的arr ...

  6. php 找祖先,鲸鱼的祖先有4条腿

    乔治亚鲸复原图 乔治亚鲸化石 美国科学家在一项研究中发现,早期的鲸鱼其实长着强而有力的腿,它们当时主要靠划动腿部在海洋中活动.这一新发现也许可以揭示鲸从陆地走向海洋的神秘进化过程. 在<脊椎动物 ...

  7. 动态规划:求最大公共子串

    1 /// <summary> 2 /// 动态规划:求最大公共子串 3 /// LCS (Longest Common Subsequence) 4 /// </summary&g ...

  8. Kmp算法之 求最大公共前后缀

    先抛问题1:如果我们已知一个字符str的最大公共前后缀长度,当这个str再添加一个字符的str2,如何判断这个新的str2的最大公共前后缀长度?? 结论:只要将新添加的字符,与str的最大公共前后缀中 ...

  9. 【HDU - 1251 】统计难题(字典树,求拥有公共前缀的字符串数量)

    题干: Ignatius最近遇到一个难题,老师交给他很多单词(只有小写字母组成,不会有重复的单词出现),现在老师要他统计出以某个字符串为前缀的单词数量(单词本身也是自己的前缀). Input 输入数据 ...

最新文章

  1. zip伪加密做法及原理
  2. 合流超几何函数_【初中数学大招流】从平面几何到解析几何
  3. YAFFS2移植到AliOS Things指南
  4. Native Crash 分析
  5. 计算机不定时黑屏,联想一体机电脑不定时黑屏是怎么回事?
  6. Xshell代理访问外网或者公司的内网
  7. SpringBoot原理-SpringBoot核心运行原理
  8. 4月7日发!荣耀Play6T Pro开启预约:后置相机模组感人
  9. textfield获取其中内容_用户认知视角下的产品信息获取体验度量体系研究
  10. Halcon对文件的创建、读取、写入、删除等操作
  11. 利用Power BI制作分级地图报表
  12. 图片体积过大怎么缩小?如何缩小图片文件的大小?
  13. 超火的快闪文字视频制作,用这个软件就能轻松学会
  14. springboot整合POI导出word(文字加图片)
  15. ai字体行间距怎么调整_ai怎么调整文字间距- ai调整行间距的详细教程
  16. HDU-2550-百步穿杨
  17. Android中各种颜色在dawable.xml中的定义
  18. ARM 汇编的操作 设置CPU寄存器BASEPRI
  19. 告别尴尬,自在出行,就选电动车排名前十名的绿源
  20. 只用3行代码,让Python提速4倍!最强辅助

热门文章

  1. SWUST OJ 77: 计算员工周工资
  2. 大家一起来找茬(BUG)
  3. PHP水仙花数程序设计思路,php实现水仙花数示例分享
  4. SCCM2012软件分发
  5. Python3爬取国家统计局官网2017年全国所有城市县镇数据
  6. zebradesginer zpl代码_老司机为您win7系统安装斑马GK888t打印机驱动的操作技巧
  7. CUDA out of memory解决办法
  8. 简单学习Java中的抽象语法树(AST)
  9. 删除数字求最小值(贪心)
  10. 基于因果推断的根因分析