首页 > 编程语言 >#yyds干货盘点# LeetCode程序员面试金典:二叉搜索树的最近公共祖先

#yyds干货盘点# LeetCode程序员面试金典:二叉搜索树的最近公共祖先

时间:2023-09-19 23:32:03浏览次数:50  
标签:node yyds TreeNode 祖先 金典 List path root LeetCode

题目:

给定一个二叉搜索树, 找到该树中两个指定节点的最近公共祖先。

百度百科中最近公共祖先的定义为:“对于有根树 T 的两个结点 p、q,最近公共祖先表示为一个结点 x,满足 x 是 p、q 的祖先且 x 的深度尽可能大(一个节点也可以是它自己的祖先)。”

例如,给定如下二叉搜索树:  root = [6,2,8,0,4,7,9,null,null,3,5]

#yyds干货盘点# LeetCode程序员面试金典:二叉搜索树的最近公共祖先_List

 

示例 1:

2 
8 
6。

示例 2:

2
4
2

代码实现:

class Solution {
    public TreeNode lowestCommonAncestor(TreeNode root, TreeNode p, TreeNode q) {
        List<TreeNode> path_p = getPath(root, p);
        List<TreeNode> path_q = getPath(root, q);
        TreeNode ancestor = null;
        for (int i = 0; i < path_p.size() && i < path_q.size(); ++i) {
            if (path_p.get(i) == path_q.get(i)) {
                ancestor = path_p.get(i);
            } else {
                break;
            }
        }
        return ancestor;
    }

    public List<TreeNode> getPath(TreeNode root, TreeNode target) {
        List<TreeNode> path = new ArrayList<TreeNode>();
        TreeNode node = root;
        while (node != target) {
            path.add(node);
            if (target.val < node.val) {
                node = node.left;
            } else {
                node = node.right;
            }
        }
        path.add(node);
        return path;
    }
}

标签:node,yyds,TreeNode,祖先,金典,List,path,root,LeetCode
From: https://blog.51cto.com/u_13321676/7530530

相关文章

  • #yyds干货盘点# LeetCode程序员面试金典:建立四叉树
    1.简述:给你一个 n*n 矩阵 grid ,矩阵由若干 0 和 1 组成。请你用四叉树表示该矩阵 grid 。你需要返回能表示矩阵 grid 的四叉树的根结点。四叉树数据结构中,每个内部节点只有四个子节点。此外,每个节点都有两个属性:val:储存叶子结点所代表的区域的值。1对应 True,0对......
  • Leetcode刷题88. 合并两个有序数组
    给你两个按 非递减顺序 排列的整数数组 nums1 和 nums2,另有两个整数 m 和 n ,分别表示 nums1 和 nums2 中的元素数目。请你 合并 nums2 到 nums1 中,使合并后的数组同样按 非递减顺序 排列。注意:最终,合并后数组不应由函数返回,而是存储在数组 nums1 中。为了......
  • LeetCode 周赛上分之旅 #46 经典二分答案与质因数分解
    ⭐️本文已收录到AndroidFamily,技术和职场问题,请关注公众号[彭旭锐]和BaguTreePro知识星球提问。学习数据结构与算法的关键在于掌握问题背后的算法思维框架,你的思考越抽象,它能覆盖的问题域就越广,理解难度也更复杂。在这个专栏里,小彭与你分享每场LeetCode周赛的解题报告,一......
  • Leetcode刷题1.两数之和
     1.两数之和给定一个整数数组 nums 和一个整数目标值 target,请你在该数组中找出 和为目标值 target 的那 两个 整数,并返回它们的数组下标。你可以假设每种输入只会对应一个答案。但是,数组中同一个元素在答案里不能重复出现。你可以按任意顺序返回答案。示......
  • #yyds干货盘点#Redux 的基本使用
    1.核心概念1.什么是Redux?Redux是一个管理状态(数据)的容器,提供了可预测的状态管理2.什么是可预测的状态管理?数据在什么时候,因为什么,发生了什么改变,都是可以控制和追踪的,我们就称之为预测的状态管理3.为什么要使用Redux?React是通过数据驱动界面更新的,React负责更新界面,而我们负责......
  • 算法训练day11 栈与队列 02 LeetCode20
    算法训练day11栈与队列02LeetCode20.1047.15020.有效的括号:题目:20.有效的括号-力扣(LeetCode)题解:代码随想录(programmercarl.com)classSolution{public:boolisValid(strings){stack<char>str;if(s.size()%2==1)......
  • Leetcode刷题70.爬楼梯
    题目:假设你正在爬楼梯。需要 n 阶你才能到达楼顶。每次你可以爬 1 或 2 个台阶。你有多少种不同的方法可以爬到楼顶呢?示例1:输入:n=2输出:2解释:有两种方法可以爬到楼顶。1.1阶+1阶2.2阶示例2:输入:n=3输出:3解释:有三种方法可以爬到楼顶。1.1阶+1阶......
  • leetcode71. 简化路径
     classSolution:defsimplifyPath(self,path:str)->str:li=path.split("/")res=[]foriinli:ifi=='..'andres:res.pop()ifi!='.'andi!='......
  • 算法训练day10 LeetCode 232
    算法训练day10:LeetCode232.225.232.用栈实现队列题目232.用栈实现队列-力扣(LeetCode)题解代码随想录(programmercarl.com)classMyQueue{public:stack<int>stIn;stack<int>stOut;MyQueue(){}voidpush(intx){......
  • #yyds干货盘点#TypeScript条件类型
    索引类型keyof会提取interface中的keyclassKeyCls{name:stringage:number}typeKeyClsExample1=keyofKeyCls//name|agefunctiongetParams(params:keyofKeyCls){}getParams('name')//正常getParams('age')//正常getParams('sex......