#include<iostream>
#include<vector>
using namespace std;struct Tree
{Tree *pLeft;Tree *pRight;int nValue;
};bool FindPath(Tree *root,int nFindValue,vector<int> &vec)
{if(root == NULL){return false;}bool flag = false;//判断是否找到要找到的节点值(路径)vec.push_back(root->nValue); //将值放到vector中if(root->nValue == nFindValue)//如果找到返回 true ,此时上一层的 flag 为true{return true;}if(!flag && root->pLeft != NULL)//如果找到值了,flag 为true 就不会继续查找了{flag = FindPath(root->pLeft,nFindValue,vec);}if(!flag && root->pRight != NULL)//如果找到值了,flag 为true 就不会继续查找了{flag = FindPath(root->pRight,nFindValue,vec);}if(flag == false)//如果找到值了 , 此时的路径  不应该 从 vector中 删除{vec.pop_back();}return flag;
}
int PanDuan(Tree *root,int nFindValue1,int nFindValue2)
{vector<int> vec1,vec2;int nValue = -1;int flag1 = FindPath(root,nFindValue1,vec1);int flag2 = FindPath(root,nFindValue2,vec2);for(int i=0;i<vec1.size();i++){cout<<vec1[i]<<" ";}cout<<endl;for(int i=0;i<vec2.size();i++){cout<<vec2[i]<<" ";}cout<<endl;if(flag1 && flag2){for(int i = 0 ; i< vec1.size()< vec2.size()?vec1.size():vec2.size();i++){if(vec1[i] != vec2[i]){break;}else{nValue = vec1[i];}}}return nValue;
}
Tree *newNode(int nValue)
{Tree *temp = new Tree;temp->nValue = nValue;temp->pLeft = NULL;temp->pRight = NULL;return temp;
}
int main()
{Tree * root = newNode(1);root->pLeft = newNode(2);root->pRight = newNode(3);root->pLeft->pLeft = newNode(4);root->pLeft->pRight = newNode(5);root->pRight->pLeft = newNode(6);root->pRight->pRight = newNode(7);cout<<PanDuan(root,4,6)<<endl;return 0;
}

LCA树两个节点最低公共祖先相关推荐

  1. 二叉树两个节点最近公共祖先的解法

    假设有一个二叉树.根节点为TreeNode root.p节点和 q节点均在二叉树中.求p和q的最近公共祖先节点. 优雅的递归解法: 对于这个问题, 我们定义一个函数.但是这个函数扩充这个问题的定义 p ...

  2. 寻找树中两个结点的最低公共祖先

    寻找树中两个结点的最低公共祖先 Q:在树中寻找两个结点的最低公共祖先,是什么意思呢? A:树是由根节点衍生左右孩子继续衍生左右孩子的左右孩子.所以呢树中的两个结点是一定拥有最低公共祖先(这两个结点Q: ...

  3. 由浅入深:求给定两个树节点的最低公共祖先(二叉树、普通树结构)JAVA实现

    最近看了一道面试题目,觉得很有意思,而且常常被问到,今天综合归纳了一下这道题目,并给出了各种变形题目,附上JAVA版的程序解答. 题目是这样的:寻找二叉树的最低公共祖先?(其中隐含着一个盲点:树是什么 ...

  4. 有一个1亿结点的树,已知两个结点, 求它们的最低公共祖先!

    对该问题,分为如下几种情形讨论: 情形一: 假如该树为二叉树,并且是二叉搜索树, 依据二叉搜索树是排过序的, 我们只需要从树的根结点开始,逐级往下,和两个输入的结点进行比较. 如果当前结点的值比两个结 ...

  5. PAT甲级1151 LCA in a Binary Tree (30 分):[C++题解]LCA、最低公共祖先、哈希表映射

    文章目录 题目分析 题目链接 题目分析 来源:acwing 分析: 和下面这道题几乎是同一题:PAT甲级1143 Lowest Common Ancestor (30 分):[C++题解]LCA.最低 ...

  6. 50:树中两个结点的最低公共祖先

    题目:求树中两个结点的最低公共祖先,此树不是二叉树,并且没有指向父节点的指针. 树的结点定义 private static class TreeNode {int val;List<TreeNo ...

  7. PAT甲级1143 Lowest Common Ancestor (30 分):[C++题解]LCA、最低公共祖先

    文章目录 题目分析 题目链接 题目分析 来源:acwing 分析:二叉搜索树的中序遍历是隐含给定的,它的中序遍历就是从小到大排列. 所以这道题先是根据给定的前序遍历和中序遍历,建树. 建树的时候需要用 ...

  8. 树中两个结点的最低公共祖先

    题目描述: 给定一棵树,同时给出树中的两个结点,求它们的最低公共祖先. 输入: 输入可能包含多个测试样例. 对于每个测试案例,输入的第一行为一个数n(0<n<1000),代表测试样例的个数 ...

  9. C++实现二叉树相关问题(先序遍历,中序遍历,后序遍历,层序遍历,搜索二叉树、平衡二叉树、满二叉树、完全二叉树的判断,最低公共祖先,二叉树的序列化和反序列化)

    目录 题目一 二叉树递归和非递归遍历 题目二 如何完成二叉树的宽度(也叫层序)遍历(常见题目:求一棵二叉树的宽度) 题目四 如何判断一棵二叉树是搜索二叉树(BST)? 题目四 如何判断一棵二叉树是平衡 ...

最新文章

  1. python 微信爬虫_python3简单实现微信爬虫
  2. Docker核心技术 1
  3. php+MySql注入非暴力爆字段名
  4. IIS安装与MVC程序部署
  5. 文字描边_学会这种描边效果,你的PPT也能这么好看
  6. 有python基础学java_Python基础学习篇
  7. 开源大法好,Windows 计算器又添两项新功能
  8. LVS负载均衡群集之NAT模型DR模型
  9. Windows Server 2003 SP2 企业版 ISO 下载
  10. 【软件安装】win10下Lighttools8.4.0(64)光学系统建模软件的安装教程
  11. 分享5个高质无损音乐网站,歌曲很丰富,爱听歌的小伙伴有耳福了
  12. 不可不知的CPU风扇清理技巧
  13. 蓝桥杯单片机决赛(国赛)第十一届题目加代码
  14. 用Python搞定豆瓣上征婚交友的小姐姐们~
  15. 计算机查看流量记录,教你用路由器查看电脑数据流量使用情况的方法
  16. JSP四大作用域,九大内置对象
  17. centos7无盘启动_从无盘启动看Linux启动原理
  18. 联想ThinkSystem融合架构简介 - ThinkAgile SX for Nutanix
  19. 计算机重启恢复到推荐分辨率,电脑重启后分辨率变低是什么情况?Win10分辨率无法调整怎么办?...
  20. java复合语句与条件语句

热门文章

  1. Eucalyptus EE的介绍及功能说明
  2. XMPP系列2:如何掌握XMPP协议
  3. php ci框架中脚手架是做什么用的
  4. Linux 命令(92)—— locate 命令
  5. Linux 索引节点 inode
  6. C#随机不重复给数组赋值1-100并排序
  7. 统计无符号整数二进制中 1 的个数(Hamming Weight)
  8. 超慢速移动动画使用CSS3实现流畅效果
  9. 一定要知道的,那些Linux基本操作命令
  10. 洛谷2486 【SDOI2011】染色(线段树+树链剖分)