二叉树中找两个结点的最近公共祖先结点
一、搜索二叉树:第一变种是二叉树是一种特殊的二叉树:查找二叉树。也就是树是排序过的,位于左子树上的结点都比父结点小,而位于右子树的结点都比父结点大。我们只需要从根结点开始和两个结点进行比较。如果当前结点的值比两个结点都大,则最低的共同父结点一定在当前结点的左子树中。如果当前结点的值比两个结点都小,则最低的共同父结点一定在当前结点的右子树中。(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;}
二叉树中找两个结点的最近公共祖先结点相关推荐
- 牛客题霸 [ 在二叉树中找到两个节点的最近公共祖先] C++题解/答案
牛客题霸 [ 在二叉树中找到两个节点的最近公共祖先] C++题解/答案 题目描述 给定一棵二叉树以及这棵树上的两个节点 o1 和 o2,请找到 o1 和 o2 的最近公共祖先节点. 题解: 我们想想最 ...
- 在二叉树中找到两个节点的最近公共祖先(C++)
在二叉树中找到两个节点的最近公共祖先 描述 给定一棵二叉树(保证非空)以及这棵树上的两个节点对应的val值 o1 和 o2,请找到 o1 和 o2 的最近公共祖先节点. 数据范围:树上节点数满足1 ...
- 求二叉树中任意两个节点的最近公共祖先节点
思路:从根节点开始遍历,如果node1和node2中的任一个和root匹配,那么root就是最低公共祖先. 如果都不匹配,则分别递归左.右子树,如果有一个 节点出现在左子树,并且另一个节点出现在右子树 ...
- 常考数据结构与算法:在二叉树中找到两个节点的最近公共祖先
题目描述 给定一棵二叉树以及这棵树上的两个节点 o1 和 o2,请找到 o1 和 o2 的最近公共祖先节点. 假设节点的值都大于0. 比如9,10的最近公共祖先节点是2. 思路: 从根节点开始遍历 ...
- 【IT笔试面试题整理】寻找二叉树两节点的最近的公共祖先
[试题描述] 求二叉树中任意两个节点的最近公共祖先也称为LCA问题(Lowest Common Ancestor). 二叉查找树 如果该二叉树是二叉查找树,那么求解LCA十分简单. 基本思想为:从树根 ...
- 树中两个结点的最低公共祖先
题目描述: 给定一棵树,同时给出树中的两个结点,求它们的最低公共祖先. 输入: 输入可能包含多个测试样例. 对于每个测试案例,输入的第一行为一个数n(0<n<1000),代表测试样例的个数 ...
- 寻找树中两个结点的最低公共祖先
寻找树中两个结点的最低公共祖先 Q:在树中寻找两个结点的最低公共祖先,是什么意思呢? A:树是由根节点衍生左右孩子继续衍生左右孩子的左右孩子.所以呢树中的两个结点是一定拥有最低公共祖先(这两个结点Q: ...
- 【数据结构周周练】007顺序结构实现完全二叉树操作- 求编号i与j最近公共祖先结点
树型结构是数据结构中学到的第一个一对多的结构,是非常重要的非线性结构,也是比较难的一个结构,由于一叉树是顺序表,三叉树比较复杂,最常用的是二叉树.从这次开始就带领大家走进树的世界. 目录 一.题目 二 ...
- 寻找二叉树中两个结点的最近公共祖先
寻找二叉树中两个结点的最近公共祖先(这两个结点一定在树中) 对于二叉树中两个结点的最近公共祖先来说 ,这两个结点分别在自己的左子树和右子树中,所以要寻找二叉树中两个结点的最近公共祖先可以: 从根结点开 ...
最新文章
- Fragment:support.v4.content.Loader.deliverResult
- SAP云平台开启Kyma功能时发送到后台的HTTP请求
- Windows7下如何设置MyEclipse2014字体大小
- 贪心---移掉K位数字
- 关于eclipse的一些简单配置
- 南京航空航天大学计算机网课,南京航空航天大学课程教学大纲-南京航空航天大学计算机科学与技术(9页)-原创力文档...
- MYSQLmy-innodb-heavy-4G.cnf配置文件注解
- 为什么我会反对大家写工作日报
- [转]微波/毫米波雷达
- 【C语言数据结构7】--串的实现
- Java电子书下载地址
- LINUX下信号量的使用
- 数据架构选型必读:2021上半年数据库产品技术解析
- 【过关斩将】如何制作高水平简历-观念篇
- 获取鼠标图片和鼠标位置的方法
- Android_GitHub_xUtils之DbUtils、ViewUtils、HttpUtils、BitmapUtils
- flea-db使用之JPA分库分表实现
- android 颜色透明度16进制换算
- php字符串常用内置函数
- 公务员考试情景面试题设计技术