//求节点p和q的最近公共祖先节点,假设用后序遍历先遇到p节点
typedef struct{BiTree t;int tag;    //tag=0表示左子女已被访问,tag=1表示右子女已被访问。
}stack;
stack s[],s1[];
BiTree Ancestor(BiTree ROOT,BiTNode *p,BiTNode *q){int top=0;BiTNode bt=ROOT;while(bt!=NULL||top>0){while(bt!=NULL&&bt!=p&&bt!=q){ //如果bt是p或q不执行入栈操作 while(bt!=NULL){s[++top].t=bt;s[top].tag=0;bt=bt->lchild;}}while(top!=0&&s[top].tag==1){  //必须保证此时右节点已遍历完毕 if(s[top].t==p){ //如果栈顶是p,把栈内节点也就是p的祖先节点放入到辅助栈里 for(int i=1;i<=top;i++){s1[i]=s[i];top1=top;}}else if(s[top].t==q){    //如果栈顶是q,依次比较s和s1内的节点,找到公共祖先节点。 for(int i=top;i>0;i--){for(int j=top1;j>0;j--){if(s1[j].t==s[i].t){return s[i].t;}}}}top--;}if(top!=0){        //此时tag为0,说明刚从左节点返回或左节点为空,准备进入右节点。 s[top].tag=1;bt=s[top].t->rchild;}}return NULL;
}

求节点p和q的最近公共祖先节点相关推荐

  1. 2022-05-22:给定一个二叉树, 找到该树中两个指定节点的最近公共祖先。 百度百科中最近公共祖先的定义为:“对于有根树 T 的两个节点 p、q,最近公共祖先表示为一个节点 x,满足 x 是 p

    2022-05-22:给定一个二叉树, 找到该树中两个指定节点的最近公共祖先. 百度百科中最近公共祖先的定义为:"对于有根树 T 的两个节点 p.q,最近公共祖先表示为一个节点 x,满足 x ...

  2. 经典算法——二叉搜索树的公共祖先节点

    介绍 二叉搜索树的公共祖先节点是指:对于给定的两个节点p.q,向上寻找离二者最近的公共节点. public class Node<T extends Comparable<T>> ...

  3. 二叉树寻找祖先C语言,二叉树寻找最近公共祖先节点

    方法一:递归 1.思路 (1)定义fx表示x节点的子树中是否包含p或者q节点,如果包含为true,否则为false.那么符合条件的最近公共祖先节点一定满足下面的条件: (flson && ...

  4. 二叉树最近公共祖先节点

    寻找最近公共祖先节点(LCA) 在一棵二叉树中,对于节点X和节点Y,X和Y的LCA是这棵树中X和Y的第一个共同祖先.寻找公共节点的算法思路很简单:对于节点x和y,找到树的根节点分别到x节点和y节点的路 ...

  5. 顺序存储二叉树之寻找公共祖先节点

    题目:已知一课二叉树按顺序存储结构进行存储,设计一个算法,求编号分别为i和j的两个节点的最近的公共祖先节点的值     分析:         利用数组存储一颗二叉树,一般来说我们用这种方式存储一颗完 ...

  6. 数据结构与算法之链表结构寻找p、q最近的公共祖先

    链表结构,寻找p.q最近的公共祖先 数据结构与算法之链表结构寻找p.q最近的公共祖先 链表结构,寻找p.q最近的公共祖先 问题 想法 代码 问题 设一棵二叉树的结点结构为(LLINK, INFO, R ...

  7. 求二叉树两个结点的最近公共祖先

    题目描述: 一颗二叉树按顺序存储结构进行存储,设计一个算法,求编号i和j的最近公共祖先 思路: 已知:二叉树.顺序存储 空的结点用"#"表示 如果i,j所在位置的结点数据不是&qu ...

  8. 求二叉树中任意两个节点的最近公共祖先节点

    思路:从根节点开始遍历,如果node1和node2中的任一个和root匹配,那么root就是最低公共祖先. 如果都不匹配,则分别递归左.右子树,如果有一个 节点出现在左子树,并且另一个节点出现在右子树 ...

  9. LeetCode 2096. 从二叉树一个节点到另一个节点每一步的方向(最小公共祖先)

    文章目录 1. 题目 2. 解题 1. 题目 给你一棵 二叉树 的根节点 root ,这棵二叉树总共有 n 个节点. 每个节点的值为 1 到 n 中的一个整数,且互不相同. 给你一个整数 startV ...

最新文章

  1. 深入.NET 4.0之,LazyT点滴
  2. 29/07/2010 sunrise
  3. Leetcode(11)-盛最多水的容器
  4. [Leedcode][JAVA][第98题][验证二叉搜索树]
  5. Service Locator Pattern in C# with Lazy Initialization(转)
  6. c++设计成员变量可动态调整的动态类结构
  7. C++的STL标准模板库思维导图
  8. 初入C++(一) c++中的一些基础和与c的一些区别
  9. 002-Go通过ioutil 读写文件
  10. 弹性模量及刚度之间的关系
  11. JVM(四).Class 文件结构(附字节码完整解析)
  12. 预计招收300人,北京大学信息工程学院2022年夏令营开启报名
  13. 用C语言编程验证 “ 哥德巴赫猜想 ”
  14. 用计算机说我爱你怎么能,让电脑替你说我爱你 520科技宅花式告白技巧 (全文)...
  15. 【IT之路】Docker系列-CentOS 7 64位镜像下载
  16. 高德地图各种摄像头图标_汽车导航怎么看?高德地图各种符号图标图解大全
  17. uniapp-mixpanel用户行为分析埋点统计插件
  18. 年货节买蓝牙耳机哪个品牌最好?数码达人力荐的几大机型!
  19. ES6的Array.from方法创建长度为N的undefined数组
  20. P2 PikaChu_SQL注入

热门文章

  1. ubuntu虚拟机使用本机摄像头教程
  2. Django web开发系列(二)图书借阅管理系统之模型设计
  3. 月亮网摘2009.2.12
  4. 【网络基础】DNS是什么
  5. 每天都在吃的水果和蔬菜,你知道怎么区分吗?
  6. 2022山东济宁市邹城市事业单位招聘精选试题及答案
  7. mysql PREPARE用法_mysql prepare语句使用
  8. 技术类人员的简历制作指南
  9. 前后端分离之后端代码实现获取数据库数据(2)——django+mysql+vue+element
  10. DDNS动态域名解析功能与实现设置