求节点p和q的最近公共祖先节点
//求节点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的最近公共祖先节点相关推荐
- 2022-05-22:给定一个二叉树, 找到该树中两个指定节点的最近公共祖先。 百度百科中最近公共祖先的定义为:“对于有根树 T 的两个节点 p、q,最近公共祖先表示为一个节点 x,满足 x 是 p
2022-05-22:给定一个二叉树, 找到该树中两个指定节点的最近公共祖先. 百度百科中最近公共祖先的定义为:"对于有根树 T 的两个节点 p.q,最近公共祖先表示为一个节点 x,满足 x ...
- 经典算法——二叉搜索树的公共祖先节点
介绍 二叉搜索树的公共祖先节点是指:对于给定的两个节点p.q,向上寻找离二者最近的公共节点. public class Node<T extends Comparable<T>> ...
- 二叉树寻找祖先C语言,二叉树寻找最近公共祖先节点
方法一:递归 1.思路 (1)定义fx表示x节点的子树中是否包含p或者q节点,如果包含为true,否则为false.那么符合条件的最近公共祖先节点一定满足下面的条件: (flson && ...
- 二叉树最近公共祖先节点
寻找最近公共祖先节点(LCA) 在一棵二叉树中,对于节点X和节点Y,X和Y的LCA是这棵树中X和Y的第一个共同祖先.寻找公共节点的算法思路很简单:对于节点x和y,找到树的根节点分别到x节点和y节点的路 ...
- 顺序存储二叉树之寻找公共祖先节点
题目:已知一课二叉树按顺序存储结构进行存储,设计一个算法,求编号分别为i和j的两个节点的最近的公共祖先节点的值 分析: 利用数组存储一颗二叉树,一般来说我们用这种方式存储一颗完 ...
- 数据结构与算法之链表结构寻找p、q最近的公共祖先
链表结构,寻找p.q最近的公共祖先 数据结构与算法之链表结构寻找p.q最近的公共祖先 链表结构,寻找p.q最近的公共祖先 问题 想法 代码 问题 设一棵二叉树的结点结构为(LLINK, INFO, R ...
- 求二叉树两个结点的最近公共祖先
题目描述: 一颗二叉树按顺序存储结构进行存储,设计一个算法,求编号i和j的最近公共祖先 思路: 已知:二叉树.顺序存储 空的结点用"#"表示 如果i,j所在位置的结点数据不是&qu ...
- 求二叉树中任意两个节点的最近公共祖先节点
思路:从根节点开始遍历,如果node1和node2中的任一个和root匹配,那么root就是最低公共祖先. 如果都不匹配,则分别递归左.右子树,如果有一个 节点出现在左子树,并且另一个节点出现在右子树 ...
- LeetCode 2096. 从二叉树一个节点到另一个节点每一步的方向(最小公共祖先)
文章目录 1. 题目 2. 解题 1. 题目 给你一棵 二叉树 的根节点 root ,这棵二叉树总共有 n 个节点. 每个节点的值为 1 到 n 中的一个整数,且互不相同. 给你一个整数 startV ...
最新文章
- 深入.NET 4.0之,LazyT点滴
- 29/07/2010 sunrise
- Leetcode(11)-盛最多水的容器
- [Leedcode][JAVA][第98题][验证二叉搜索树]
- Service Locator Pattern in C# with Lazy Initialization(转)
- c++设计成员变量可动态调整的动态类结构
- C++的STL标准模板库思维导图
- 初入C++(一) c++中的一些基础和与c的一些区别
- 002-Go通过ioutil 读写文件
- 弹性模量及刚度之间的关系
- JVM(四).Class 文件结构(附字节码完整解析)
- 预计招收300人,北京大学信息工程学院2022年夏令营开启报名
- 用C语言编程验证 “ 哥德巴赫猜想 ”
- 用计算机说我爱你怎么能,让电脑替你说我爱你 520科技宅花式告白技巧 (全文)...
- 【IT之路】Docker系列-CentOS 7 64位镜像下载
- 高德地图各种摄像头图标_汽车导航怎么看?高德地图各种符号图标图解大全
- uniapp-mixpanel用户行为分析埋点统计插件
- 年货节买蓝牙耳机哪个品牌最好?数码达人力荐的几大机型!
- ES6的Array.from方法创建长度为N的undefined数组
- P2 PikaChu_SQL注入