首页 > 编程语言 >每日算法之二叉搜索树的最近公共祖先

每日算法之二叉搜索树的最近公共祖先

时间:2022-11-16 08:44:42浏览次数:39  
标签:结点 val int 之二 算法 搜索 节点 root curNode

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

描述

给定一个二叉搜索树, 找到该树中两个指定节点的最近公共祖先。
1.对于该题的最近的公共祖先定义:对于有根树T的两个节点p、q,最近公共祖先LCA(T,p,q)表示一个节点x,满足x是p和q的祖先且x的深度尽可能大。在这里,一个节点也可以是它自己的祖先.
2.二叉搜索树是若它的左子树不空,则左子树上所有节点的值均小于它的根节点的值; 若它的右子树不空,则右子树上所有节点的值均大于它的根节点的值
3.所有节点的值都是唯一的。
4.p、q 为不同节点且均存在于给定的二叉搜索树中。
数据范围:
3<=节点总数<=10000
0<=节点值<=10000

思路:非递归,利用二叉搜索树的特点。左子树<根节点<右子树

若p,q都比当前结点的值小,说明最近公共祖先结点在当前结点的左子树上,继续检查左子树;
若p,q都比当前结点的值大,说明最近公共祖先结点在当前结点的右子树上,继续检查右子树;
若p,q中一个比当前结点的值大,另一个比当前结点的值小,则当前结点为最近公共祖先结点

代码

package esay.JZ68二叉搜索树的最近公共祖先;

import java.util.*;

class TreeNode {
    int val = 0;
    TreeNode left = null;
    TreeNode right = null;

    public TreeNode(int val) {
        this.val = val;
    }
}

public class Solution {
    /**
     * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
     *
     * @param root TreeNode类
     * @param p    int整型
     * @param q    int整型
     * @return int整型
     */
    public int lowestCommonAncestor(TreeNode root, int p, int q) {
        // write code here
        //方法1、非递归
        /*TreeNode curNode = root;
        while(true) {
            if (p < curNode.val && q < curNode.val) {
                curNode = curNode.left;
            } else if (p > curNode.val && q > curNode.val) {
                curNode = curNode.right;
            } else {
                return curNode.val;
            }
        }*/

        //方法2、递归
        if (root == null) {
            return -1;
        }
        if (p < root.val && q < root.val) {
            return lowestCommonAncestor(root.left, p, q);
        } else if (p > root.val && q > root.val) {
            return lowestCommonAncestor(root.right, p, q);
        } else {
            return root.val;
        }

    }
}

标签:结点,val,int,之二,算法,搜索,节点,root,curNode
From: https://www.cnblogs.com/loongnuts/p/16894709.html

相关文章

  • 强化学习代码实战-07 Actor-Critic 算法
    Actor(策略网络)和Critic(价值网络)Actor要做的是与环境交互,并在Critic价值函数的指导下用策略梯度学习一个更好的策略。Critic要做的是通过Actor与环境交互收集的数......
  • 算法系列:斐波那契数列问题
    问题描述:假设有个楼梯,每次只能走3步或者5步,问到达第N节会有几种组合?思路分析:这个问题需要反过来思考才能比较容易的找到规律。总共有N级台阶,因为每次要么上3阶......
  • 哈希算法学习笔记 I:XOR hashing
    咕咕中,两天后填坑。CF1175F.TheNumberofSubpermutations求一个序列中是排列的子串数量。CF1746F.Kazaee多组询问,求一个序列的\([l,r]\)段是否为排列。......
  • 最优二叉搜索树
    二叉搜索树是一棵空树或者满足以下的性质:每个结点作为搜索对象,它的关键字是互不相同的。对于树上的所有结点,如果它有左子树,那么左子树上所有结点的关键字都小于该结点的......
  • 测试面试 | 一道大厂算法面试真题,你能答上来吗?(附答案)
    时光飞快,眨眼又到一年年底!年底其实是跳槽换坑的绝佳时机,毕竟可以「年前面试,年后入职」,而且面试越早,好坑位较多,可选择的余地也较大。建议有换工作意向的测试同学可以多发发简......
  • 前端几何计算GIS分析算法库介绍及优缺点分析
    前言在WebGIS开发中,经常要用到一些常用的几何计算,GIS空间分析等功能,如点到线的距离、点与多边形的关系、计算面积、缓冲区分析、最短路径分析等,这样灵活性会更好;那怎么......
  • 分布式搜索引擎01-- elasticsearch基础
    分布式搜索引擎01--elasticsearch基础0.学习目标1.初识elasticsearch1.1.了解ES1.1.1.elasticsearch的作用elasticsearch是一款非常强大的开源搜索引擎,具备非常多强......
  • 分布式搜索引擎02-elasticsearch的数据搜索功能-DSL和RestClient实现搜索
    分布式搜索引擎02在昨天的学习中,我们已经导入了大量数据到elasticsearch中,实现了elasticsearch的数据存储功能。但elasticsearch最擅长的还是搜索和数据分析。所以今天,我......
  • 分布式搜索引擎03-数据聚合
    分布式搜索引擎030.学习目标1.数据聚合聚合(aggregations)可以让我们极其方便的实现对数据的统计、分析、运算。例如:什么品牌的手机最受欢迎?这些手机的平均价格、最高......
  • 实验四:神经网络算法实验
    【实验目的】理解神经网络原理,掌握神经网络前向推理和后向传播方法;掌握神经网络模型的编程实现方法。【实验内容】1.1981年生物学家格若根(W.Grogan)和维什(W.Wirth)发现了......