简介

dfs 找出路劲,然后长链在短链里面找.

code

/**
* Definition for a binary tree node.
* struct TreeNode {
* int val;
* TreeNode *left;
* TreeNode *right;
* TreeNode(int x) : val(x), left(NULL), right(NULL) {}
* };
*/
class Solution {
public:
int level = 0;
vector<TreeNode*> path1;
vector<TreeNode*> path2;
bool dfs(TreeNode *n, vector<TreeNode*> &path, TreeNode *p){
if(n == p){
path.push_back(n);
return true;
}
if(n->left){
if(dfs(n->left, path, p)){
path.push_back(n);
return true;
}
}
if(n->right){
if(dfs(n->right, path, p)){
path.push_back(n);
return true;
}
}
return false;
}
TreeNode* lowestCommonAncestor(TreeNode* root, TreeNode* p, TreeNode* q) {
dfs(root, path1, p);
dfs(root, path2, q);
// 长链在短链找
if(path1.size() >= path2.size()){
int i=0;
while(i<path1.size()){
if(find(path2.begin(), path2.end(), path1[i])!= path2.end()){
return path1[i];
}
i++;
}
}
else{
int i= 0;
while(i<path2.size()){
if(find(path1.begin(), path1.end(), path2[i])!= path1.end()){
return path2[i];
}
i++;
}
}
return nullptr;
}
};
class Solution {
private TreeNode ans;
public Solution() { // 使用公共变量记得在构造函数中初始化
this.ans = null;
}
private boolean dfs(TreeNode root, TreeNode p, TreeNode q){
if(root == null) return false;
bool lson = dfs(root.left, p, q);
bool rson = dfs(root.right, p, q);
if((lson && rson) || ((root.val == p.val || root.val == q.val) && (lson || rson))) {
ans = root;
}
return lson || rson || (root.val == p.val || root.val == q.val));
}
public TreeNode lowestCommonAncestor(TreeNode root, TreeNode p, TreeNode q) {
this.dfs(root, p, q);
return this.ans;
}
}

leetcode 236 而哈数的最近公共祖先的更多相关文章

  1. 代码随想录算法训练营day22 | leetcode 235. 二叉搜索树的最近公共祖先 ● 701.二叉搜索树中的插入操作 ● 450.删除二叉搜索树中的节点

    LeetCode 235. 二叉搜索树的最近公共祖先 分析1.0  二叉搜索树根节点元素值大小介于子树之间,所以只要找到第一个介于他俩之间的节点就行 class Solution { public T ...

  2. LeetCode 235. 二叉搜索树的最近公共祖先 32

    235. 二叉搜索树的最近公共祖先 235. Lowest Common Ancestor of a Binary Search Tree 题目描述 给定一个二叉搜索树,找到该树中两个指定节点的最近公 ...

  3. LeetCode 235. 二叉搜索树的最近公共祖先

    235. 二叉搜索树的最近公共祖先 题目描述 给定一个二叉搜索树, 找到该树中两个指定节点的最近公共祖先. 百度百科中最近公共祖先的定义为:"对于有根树 T 的两个结点 p.q,最近公共祖先 ...

  4. leetcode 235. 二叉搜索树的最近公共祖先(c++)

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

  5. Java实现 LeetCode 235 二叉搜索树的最近公共祖先

    235. 二叉搜索树的最近公共祖先 给定一个二叉搜索树, 找到该树中两个指定节点的最近公共祖先. 百度百科中最近公共祖先的定义为:"对于有根树 T 的两个结点 p.q,最近公共祖先表示为一个 ...

  6. [程序员代码面试指南]二叉树问题-在二叉树中找到两个节点的最近公共祖先、[LeetCode]235. 二叉搜索树的最近公共祖先(BST)(非递归)

    题目 题解 法一: 按照递归的思维去想: 递归终止条件 递归 返回值 1 如果p.q都不在root为根节点的子树中,返回null 2 如果p.q其中之一在root为根节点的子树中,返回该节点 3 如果 ...

  7. leetcode 235 236 二叉树两个节点的最近公共祖先

    描述: 给定二叉树两个节点,求其最近公共祖先.最近即所有公共祖先中深度最深的. ps:自身也算自身的祖先. 235题解决: 这是二叉搜索树,有序的,左边小右边大. TreeNode* lowestCo ...

  8. Leetcode 236.二叉树的最近公共祖先

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

  9. leetcode 236. 二叉树的最近公共祖先LCA(后序遍历,回溯)

    LCA(Least Common Ancestors),即最近公共祖先,是指在有根树中,找出某两个结点u和v最近的公共祖先. 题目描述 给定一个二叉树, 找到该树中两个指定节点的最近公共祖先. 百度百 ...

  10. [LeetCode] 236. Lowest Common Ancestor of a Binary Tree 二叉树的最近公共祖先

    Given a binary tree, find the lowest common ancestor (LCA) of two given nodes in the tree. According ...

随机推荐

  1. 康谋分享 | 自动驾驶联合仿真——功能模型接口FMI(终)

    在之前的文章中,我们介绍了如何构建简单的车辆模型,并基于FMI2.0构建了其FMU,其最终结构为: 今天将会和大家分享如何在aiSim中,通过UDP和aiSim车辆动力学API(Vehicle Dyn ...

  2. pytorch 实战教程之 SPP(SPPNet---Spatial Pyramid Pooling)空间金字塔池化网络代码实现 和 SPPF (Spatial Pyramid Pooling Fast)详解​​

    原文作者:aircraft 原文链接:pytorch 实战教程之 SPP(SPPNet---Spatial Pyramid Pooling)空间金字塔池化网络代码实现 和 SPPF (Spatial ...

  3. Docker开启远程守护进程访问

    默认情况下,Docker守护进程监听Unix套接字上的连接,以接受来自本地客户端的请求.通过将Docker配置为侦听IP地址和端口以及Unix套接字,可以允许Docker接受来自远程主机的请求.有关此 ...

  4. 制作netease-cloud-music-gtk的debian包

    要创建一个deb包,只需要有一个基于 debian 的操作系统即可.(不管你用的是什么 Linux 发行版,你可以使用虚拟机或者 systemd-nspawn 来创建构建 DEB 包的环境) 下载上游 ...

  5. 【BUG】Python3|安装python3-pip依赖缺失,might want to run ‘apt --fix-broken install‘ to correct these. unment

    今天装python,版本装错了. 然后删又删不掉,装pip又装不上,报错是这样的: 想装的时候: 7f2a0f717aa3:~/$ sudo apt-get install python3-pip p ...

  6. TVM:TensorIR

    TensorIR是一种用于深度学习的特定领域语言,主要有两个目的. 在各种硬件后端进行程序变换和优化的实现 用于自动张量化程序优化的抽象 import tvm from tvm.script.pars ...

  7. linux下用android-file-transfer-linux替换掉 gvfs-mtp来挂载mtp

    用android-file-transfer-linux替换掉 gvfs-mtp来挂载mtp 问题现状 在我使用gvfs-mtp挂载的时候,无论读取文件还是获取对应文件夹下所有文件的路径等操作,都非常 ...

  8. 浅谈Java异常处理机制

    前言   在 Java 中,异常被当作对象来处理,所有的异常都有一个共同的祖先java.lang.Throwable类.Throwable有两个重要的子类Exception(异常) 和 Error(错 ...

  9. CentOS 7.* 安装最新版nginx1.28*

    一.下载nginx https://nginx.org/en/download.html 选择稳定版本 nginx-1.28.0 如果使用虚拟机,可以先用windows系统下载后,上传到虚机,此步骤省 ...

  10. Linux xargs命令解析及递归执行dos2unix命令

    一.xargs 命令的作用 xargs命令的作用,是将标准输入转为命令行参数. $ echo "hello world" | xargs echo hello world 上面的代 ...