📣 Back to School开学季 - VIP通行证5折优惠!蓝莓、Offer多多同步优惠
12
返回列表 发新帖
楼主: YankeeDoodle
跳转到指定楼层
上一主题 下一主题
收起左侧

[高频题] 微软近期高频面试题分享 + 分析(十)

 
🔗
 楼主| YankeeDoodle 2021-7-19 09:26:01 | 只看该作者
全局:
二叉搜索树的最近公共祖先  解析

要利用二叉搜索树的性质
如果p和q都大于node值,则说明p和q在node的右子树中
如果p和q都小于node值,则说明p和q在node的左子树中
如果p小于node,q大于node值,则说明node即为p和q在二叉搜索树上的分叉口
也即最近公共祖先
  1. /**
  2. * Definition for a binary tree node.
  3. * public class TreeNode {
  4. *     int val;
  5. *     TreeNode left;
  6. *     TreeNode right;
  7. *     TreeNode(int x) { val = x; }
  8. * }
  9. */

  10. class Solution {
  11.     public TreeNode lowestCommonAncestor(TreeNode root, TreeNode p, TreeNode q) {
  12.         while(true){
  13.             if(root.val <= Math.max(p.val, q.val) && root.val >= Math.min(p.val, q.val)){
  14.                 break;
  15.             }else if(root.val > Math.max(p.val, q.val)){
  16.                 root = root.left;
  17.             }else{
  18.                 root = root.right;
  19.             }
  20.         }
  21.         return root;
  22.     }
  23. }
复制代码



复杂度分析
  • 时间复杂度:O(n),其中 n*n* 是给定的二叉搜索树中的节点个数。分析思路与方法一相同。
  • 空间复杂度:O(1)。


回复

使用道具 举报

🔗
clark.li86 2021-8-4 09:39:16 | 只看该作者
全局:
都是经典题!
最后一道还可以延伸为n-arry tree中两个节点的最近公共祖先
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册账号
隐私提醒:
  • ☑ 禁止发布广告,拉群,贴个人联系方式:找人请去🔗同学同事飞友,拉群请去🔗拉群结伴,广告请去🔗跳蚤市场,和 🔗租房广告|找室友
  • ☑ 论坛内容在发帖 30 分钟内可以编辑,过后则不能删帖。为防止被骚扰甚至人肉,不要公开留微信等联系方式,如有需求请以论坛私信方式发送。
  • ☑ 干货版块可免费使用 🔗超级匿名:面经(美国面经、中国面经、数科面经、PM面经),抖包袱(美国、中国)和录取汇报、定位选校版
  • ☑ 查阅全站 🔗各种匿名方法

本版积分规则

>
快速回复 返回顶部 返回列表