一、搜索二叉树:第一变种是二叉树是一种特殊的二叉树:查找二叉树。也就是树是排序过的,位于左子树上的结点都比父结点小,而位于右子树的结点都比父结点大。我们只需要从根结点开始和两个结点进行比较。如果当前结点的值比两个结点都大,则最低的共同父结点一定在当前结点的左子树中。如果当前结点的值比两个结点都小,则最低的共同父结点一定在当前结点的右子树中。(4<5 7>5)

二、三叉链(可以找到父节点):遍历4节点到根结点,找出第一个和7结点到根结点这一路径重合的结点。(分别查找4、3、5、10是否在7-8-5-10中,因为5最先重合,所以5为4和7祖先结点)

三、普通二叉树:先序遍历找出根结点到a、b结点的路径存入数组,然后遍历两个数组找到两个数组第一次不同的结点的上一个结点。

#pragma once
#include <iostream>
using namespace std;
#include <vector>struct Node
{Node* left;Node *right;int value;Node(int v):left(NULL),right(NULL),value(v){}
};
bool GetPath(Node *root,vector<Node*>&path,Node* x)
{if (root == NULL){return false;}path.push_back(root);if (root == x){return true;}if (GetPath(root->left, path, x)){return true;}if (GetPath(root->right, path, x)){return true;}else{path.pop_back();return false;}
}
Node* find_common_parent(Node* root, Node* a, Node* b)
{if (root == NULL){return NULL;}Node* common_parent = NULL;vector<Node *> va, vb;GetPath(root, va, a);GetPath(root, vb, b);size_t i = 0;while (i < va.size() && i < vb.size() && va[i] == vb[i]){common_parent = va[i];i++;}return common_parent;}

二叉树中找两个结点的最近公共祖先结点相关推荐

  1. 牛客题霸 [ 在二叉树中找到两个节点的最近公共祖先] C++题解/答案

    牛客题霸 [ 在二叉树中找到两个节点的最近公共祖先] C++题解/答案 题目描述 给定一棵二叉树以及这棵树上的两个节点 o1 和 o2,请找到 o1 和 o2 的最近公共祖先节点. 题解: 我们想想最 ...

  2. 在二叉树中找到两个节点的最近公共祖先(C++)

    在二叉树中找到两个节点的最近公共祖先 描述   给定一棵二叉树(保证非空)以及这棵树上的两个节点对应的val值 o1 和 o2,请找到 o1 和 o2 的最近公共祖先节点. 数据范围:树上节点数满足1 ...

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

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

  4. 常考数据结构与算法:在二叉树中找到两个节点的最近公共祖先

    题目描述 给定一棵二叉树以及这棵树上的两个节点 o1 和 o2,请找到 o1 和 o2 的最近公共祖先节点.   假设节点的值都大于0. 比如9,10的最近公共祖先节点是2. 思路: 从根节点开始遍历 ...

  5. 【IT笔试面试题整理】寻找二叉树两节点的最近的公共祖先

    [试题描述] 求二叉树中任意两个节点的最近公共祖先也称为LCA问题(Lowest Common Ancestor). 二叉查找树 如果该二叉树是二叉查找树,那么求解LCA十分简单. 基本思想为:从树根 ...

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

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

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

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

  8. 【数据结构周周练】007顺序结构实现完全二叉树操作- 求编号i与j最近公共祖先结点

    树型结构是数据结构中学到的第一个一对多的结构,是非常重要的非线性结构,也是比较难的一个结构,由于一叉树是顺序表,三叉树比较复杂,最常用的是二叉树.从这次开始就带领大家走进树的世界. 目录 一.题目 二 ...

  9. 寻找二叉树中两个结点的最近公共祖先

    寻找二叉树中两个结点的最近公共祖先(这两个结点一定在树中) 对于二叉树中两个结点的最近公共祖先来说 ,这两个结点分别在自己的左子树和右子树中,所以要寻找二叉树中两个结点的最近公共祖先可以: 从根结点开 ...

最新文章

  1. Fragment:support.v4.content.Loader.deliverResult
  2. SAP云平台开启Kyma功能时发送到后台的HTTP请求
  3. Windows7下如何设置MyEclipse2014字体大小
  4. 贪心---移掉K位数字
  5. 关于eclipse的一些简单配置
  6. 南京航空航天大学计算机网课,南京航空航天大学课程教学大纲-南京航空航天大学计算机科学与技术(9页)-原创力文档...
  7. MYSQLmy-innodb-heavy-4G.cnf配置文件注解
  8. 为什么我会反对大家写工作日报
  9. [转]微波/毫米波雷达
  10. 【C语言数据结构7】--串的实现
  11. Java电子书下载地址
  12. LINUX下信号量的使用
  13. 数据架构选型必读:2021上半年数据库产品技术解析
  14. 【过关斩将】如何制作高水平简历-观念篇
  15. 获取鼠标图片和鼠标位置的方法
  16. Android_GitHub_xUtils之DbUtils、ViewUtils、HttpUtils、BitmapUtils
  17. flea-db使用之JPA分库分表实现
  18. android 颜色透明度16进制换算
  19. php字符串常用内置函数
  20. 公务员考试情景面试题设计技术

热门文章

  1. 京东小京鱼沙箱联调概要
  2. Python——实现Windows桌面壁纸和bing背景的同步
  3. 不可忽视的外链平台的选择
  4. 《GitHub入门与实战》第五章
  5. 祝《玩转股票量化交易》星友们2022年股市收益高涨、财源滚滚!
  6. 如何在桌面创建常规无法删除的IE快捷方式?
  7. 【数学建模】蒙特卡洛模拟
  8. 什么是OpenAPI?
  9. 七夕快到了,教大家用Python来做一个有趣的表白二维码!
  10. 干货!AI与自动驾驶─人工智能有可能实现人类智能的挑战性任务吗