首页 > 编程语言 >代码随想录算法训练营,9月14日 | 530.二叉搜索树的最小绝对差,501.二叉搜索树中的众数,236. 二叉树的最近公共祖先

代码随想录算法训练营,9月14日 | 530.二叉搜索树的最小绝对差,501.二叉搜索树中的众数,236. 二叉树的最近公共祖先

时间:2024-09-14 11:37:11浏览次数:1  
标签:pre TreeNode res 随想录 二叉 搜索 null root

530.二叉搜索树的最小绝对差
题目链接:530.二叉搜索树的最小绝对差
文档讲解︰代码随想录(programmercarl.com)
视频讲解︰二叉搜索树的最小绝对差
日期:2024-09-14

想法:好好利用二叉搜索树中序遍历是有序的性质,设置一个节点表示前一个结点就能很方便的计算差值了
Java代码如下:

class Solution {
    int res = Integer.MAX_VALUE;
    TreeNode pre;
    public void travel(TreeNode root){
        if(root == null) return;
        travel(root.left);
        if(pre != null){
            res = Math.min(res, root.val - pre.val);
        }
        pre = root;
        travel(root.right);
    }

    public int getMinimumDifference(TreeNode root) {
        travel(root);
        return res;
    }
}

总结:root.val - pre.val是一定为非负的,所以不需要取绝对值操作了。

501.二叉搜索树中的众数
题目链接:501.二叉搜索树中的众数
文档讲解︰代码随想录(programmercarl.com)
视频讲解︰二叉搜索树中的众数
日期:2024-09-14

想法:二叉搜索树想到中序,还需要一个计数,以及一个记录最大的次数,当遍历第一个时计数为1,此后如果中序遍历的值与前一个(这里也需要pre)不同,计数重置为1,除此之外就只会是当前值与上一个值相等,所以count计数加一,接着还需要判断此时这个数是不是最大的,如果是最大的,将原本列表中的数清空(之前的最大数量的数已经不再是最大数量了),加入此时这个数root.val,再更新最大数量maxCount,操作完毕该进入下一个节点,所以需要将此时的root记录为pre,最后在递归右边,完成中序遍历。
Java代码如下:

class Solution {
    TreeNode pre;
    ArrayList<Integer> res;
    int count;
    int maxCount;
    public void findMode1(TreeNode root){
        if(root == null) return;
        findMode1(root.left);
        if(pre == null || root.val != pre.val){
            count = 1;
        }else{
            count++;
        }
        if(count > maxCount){
            res.clear();
            res.add(root.val);
            maxCount = count;
        }else if(count == maxCount){
            res.add(root.val);
        }
        pre = root;
        findMode1(root.right);
    }
    public int[] findMode(TreeNode root) {
        pre = null;
        maxCount = 0;
        res = new ArrayList<>();
        findMode1(root);
        int[] result = new int[res.size()];
        for(int i = 0; i < result.length; i++){
            result[i] = res.get(i);
        }
        return result;
    }
}

236. 二叉树的最近公共祖先
题目链接:236. 二叉树的最近公共祖先
文档讲解︰代码随想录(programmercarl.com)
视频讲解︰二叉树的最近公共祖先
日期:2024-09-14

Java代码如下:

class Solution {
    public TreeNode lowestCommonAncestor(TreeNode root, TreeNode p, TreeNode q) {
        if(root == null || root == q || root == p){//包含了两种情况,一是pq不为其中之一的祖先,另一是p为q祖先或反之
            return root;
        }
        TreeNode left = lowestCommonAncestor(root.left, p, q);//后序遍历,左右中,保证能从下往上走
        TreeNode right = lowestCommonAncestor(root.right, p, q);
        if(left == null && right == null){
            return null;
        }else if(left == null && right != null){
            return right;
        }else if(left != null && right == null){//这两步巧在返回的就是最近公共祖先了
            return left;
        }else{
            return root;
        }
    }
}

标签:pre,TreeNode,res,随想录,二叉,搜索,null,root
From: https://www.cnblogs.com/wowoioo/p/18413616

相关文章

  • 项目实战 (11)---搜索进度
    目录背景相关技术需要解决的问题查询进度实时展示描述代码python后端htmlJS运行效果查询逻辑结合描述代码运行效果总结与问题背景通过前面1-10,视频搜索系统的前后端及视频录入功能已经可以正常使用。但是我们清楚随着视频量的增加及客户搜索并发数的增加,后......
  • es:使用嵌套nested搜索
    一,创建索引:说明:创建索引时,要使用nested类型//创建索引库publicfunctioncreateSecondIndex($client,$indexName){$params=['index'=>$indexName,//索引的名称(mysql的表名)'body'=>[�......
  • 【随想录day2】LeetCode209长度最小的子数组 | LeetCode59螺旋矩阵
    LeetCode209长度最小的子数组1、题目:给定一个含有n个正整数的数组和一个正整数s,找出该数组中满足其和≥s的长度最小的连续子数组,并返回其长度。如果不存在符合条件的子数组,返回0示例:输入:s=7,nums=[2,3,1,2,4,3]输出:2解释:子数组[4,3]是该条件下的长度最小......
  • dfs深度优先搜索
    面试题04.01.节点间通路-力扣(LeetCode)classSolution{public:booldfs(unordered_map<int,vector<int>>&adjList,vector<bool>&visited,intcurrent,inttarget){if(current==target){returntrue;}......
  • 【遍历二叉树】---先,中,后,层序遍历 及 先序建立整树
    0.二叉树结点的链式存储结构#include<stdio.h>#include<stdlib.h>typedefcharTElemType;//树中元素基本类型为char类型#defineboolint#definetrue1#definefalse0//二叉树结点链式存储结构(二叉链表)typedefstructBiNode{ TElemTypedata;//数据域 str......
  • 代码随想录算法训练营,9月13日 | 654.最大二叉树,617.合并二叉树,700.二叉搜索树中的搜索
    654.最大二叉树题目链接:654.最大二叉树文档讲解︰代码随想录(programmercarl.com)视频讲解︰最大二叉树日期:2024-09-13想法:根据昨天中后序列构造二叉树的经验,要找到数组中的最大值的位置,可以设置两个指针表示子树的范围(左闭右开)Java代码如下:classSolution{publicTreeNo......
  • 自然语言处理系列六十八》搜索引擎项目实战》搜索引擎系统架构设计
    注:此文章内容均节选自充电了么创始人,CEO兼CTO陈敬雷老师的新书《自然语言处理原理与实战》(人工智能科学与技术丛书)【陈敬雷编著】【清华大学出版社】文章目录自然语言处理系列六十八搜索引擎项目实战》搜索引擎系统架构设计搜索引擎项目代码实战总结自然语言处理系......
  • 重生之我在代码随想录刷算法第一天 | 704.二分查找、27.移除元素
    参考文献链接:代码随想录本人代码是Java版本的,如有别的版本需要请上代码随想录网站查看。704.二分查找力扣题目链接解题思路这道题明确规定了数组是有序并且不重复的,要在这样的数组中寻找一个给定值的位置不由得让我想起来以前的数学知识二分查找。所以很快确定了思路......
  • 代码随想录算法 - 二叉树3
    题目1513.找树左下角的值给定一个二叉树的根节点root,请找出该二叉树的最底层最左边节点的值。假设二叉树中至少有一个节点。示例1:输入:root=[2,1,3]输出:1示例2:输入:[1,2,3,4,null,5,6,null,null,7]输出:7提示:二叉树的节点个数的范围是[1,104]-......
  • leetcode刷题day17|二叉树Part05(654.最大二叉树、617.合并二叉树、700.二叉搜索树中的
    654.最大二叉树构造树一般采用的是前序遍历,因为先构造中间节点,然后递归构造左子树和右子树。递归三步曲:1、传入参数,整数数组,数组的开始和结束,返回树的中间节点。2、终止条件:开始大于等于结束,即数组为空。3、递归逻辑:找到最大的元素,记录元素其下标,构建中间节点;递归构造......