算法训练营第二十二天(二叉树part08)

本文介绍了如何在二叉搜索树中找到两个节点的最近公共祖先,以及如何进行插入和删除操作,包括递归和迭代的方法。讨论了删除节点时需要注意的边界条件和替代子树的构建。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

算法训练营第二十二天(二叉树part08)

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

力扣题目链接(opens new window)

题目

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

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

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

在这里插入图片描述

示例 1:

  • 输入: root = [6,2,8,0,4,7,9,null,null,3,5], p = 2, q = 8
  • 输出: 6
  • 解释: 节点 2 和节点 8 的最近公共祖先是 6。

示例 2:

  • 输入: root = [6,2,8,0,4,7,9,null,null,3,5], p = 2, q = 4
  • 输出: 2
  • 解释: 节点 2 和节点 4 的最近公共祖先是 2, 因为根据定义最近公共祖先节点可以为节点本身。

说明:

  • 所有节点的值都是唯一的。
  • p、q 为不同节点且均存在于给定的二叉搜索树中

解答

相当于前序遍历,利用搜索树的值的特性,注意最后一个else,包含了两种情况,一种是一左一右,一种是当前的root的值就是p或者q的val

class Solution {
   
    public TreeNode lowestCommonAncestor(TreeNode root, TreeNode p, TreeNode q) {
   
        if (p.val > q.val){
   
			TreeNode temp = p;
			p = q;
			q = temp;
		}//p永远是小的
		return travel(root,p,q);
    }

	private TreeNode travel(TreeNode root, TreeNode p, TreeNode q){
   
		if(root == null)
			return null;
		
		if (root.val > q.val)
			return travel(root.left,p,q);
		else if (root.val < p.val)
			return travel(root.right,p,q);
		
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值