首页 > 编程语言 >代码随想录算法训练营第二十一天| 530. 二叉搜索树的最小绝对差 501. 二叉搜索树中的众数 236. 二叉树的最近公共祖先 235. 二叉搜索树的最近公共祖先 701. 二叉搜索树中的插

代码随想录算法训练营第二十一天| 530. 二叉搜索树的最小绝对差 501. 二叉搜索树中的众数 236. 二叉树的最近公共祖先 235. 二叉搜索树的最近公共祖先 701. 二叉搜索树中的插

时间:2024-04-04 14:11:58浏览次数:30  
标签:node TreeNode val root 二叉 搜索 return null 树中

530. 二叉搜索树的最小绝对差
https://leetcode.cn/problems/minimum-absolute-difference-in-bst/description/

TreeNode pre = null;
    int res = Integer.MAX_VALUE;
    public int getMinimumDifference(TreeNode root) {
        if (root == null) return 0;
        preorder(root);
        return res;
    }
    public void preorder(TreeNode node){
        if (node == null) return;
        preorder(node.left);
        if (pre != null){
            res = Math.min(res,node.val - pre.val);
        }
        pre = node;
        preorder(node.right);
    }

总结:二叉搜索树的中序就是从小到大排序,每次中序的过程中记录下来上一个节点,每次计算当前值和上一个值的差,注:处理完自己的逻辑再令pre=自己,就是给下一个节点指定了pre
501. 二叉搜索树中的众数
https://leetcode.cn/problems/find-mode-in-binary-search-tree/description/

TreeNode pre = null;
    int maxcount = 0;
    int curcount = 0;
    List<Integer> res = new ArrayList<>();
    public int[] findMode(TreeNode root) {
        preorder(root);
        int[] res1 = new int[res.size()];
        for (int i = 0; i < res.size(); i++) {
            res1[i] = res.get(i);
        }
        return res1;
    }
    public void preorder(TreeNode node){
        if (node == null) return;
        preorder(node.left);
        if (pre == null || pre.val != node.val){
            curcount = 1;
        }else {
            curcount++;
        }
        if (curcount > maxcount){
            res.clear();
            res.add(node.val);
            maxcount = curcount;
        }else if (curcount == maxcount){
            res.add(node.val);
        }
        pre = node;
        preorder(node.right);
    }

总结:由于是二叉搜索树,中序遍历是有序的,所以相同的节点分类,如果是第一个i点就置curcount为1,不是第一个就直接++,加完了之后看curcount如果等于maxcount了就直接进res,如果大于了就清空res再进res。 这个方法要保存pre为前置节点。
236. 二叉树的最近公共祖先
https://leetcode.cn/problems/lowest-common-ancestor-of-a-binary-tree/description/

public TreeNode lowestCommonAncestor(TreeNode root, TreeNode p, TreeNode q) {
        if (root == null || root == p || root == q){
            return root;
        }
        TreeNode left = lowestCommonAncestor(root.left, p, q);
        TreeNode right = lowestCommonAncestor(root.right, p, q);
        if(left == null && right == null) { // 若未找到节点 p 或 q
            return null;
        }else if(left == null && right != null) { // 若找到一个节点
            return right;
        }else if(left != null && right == null) { // 若找到一个节点
            return left;
        }else { // 若找到两个节点
            return root;
        }
    }

总结:首先一定是后序,每次从根去看左右子树,返回的节点是左右子树中找到的是p还是q还是什么都没有,再对这三者进行判断,找到了最小公共祖先之后就返回这个点,一直返回这个点没否则就返回单左或单右。 由于题中默认一定有祖先,所以如果发生q是p的孩子的情况,直接遍历到p的时候返回p就好,不用管p下面还有没有q,因为最后如果q在p下面,返回p没毛病,如果q不在p下面,返回p更没毛病。
235. 二叉搜索树的最近公共祖先
https://leetcode.cn/problems/lowest-common-ancestor-of-a-binary-search-tree/description/

public TreeNode lowestCommonAncestor(TreeNode root, TreeNode p, TreeNode q) {
        if (root.val > p.val && root.val > q.val){
            return lowestCommonAncestor(root.left,p,q);
        }
        if (root.val < p.val && root.val < q.val){
            return lowestCommonAncestor(root.right,p,q);
        }
        return root;
    }

总结:还是题中默认p,q一定有祖先,所以当遍历到一个点 p,q在不同的子树中时,这个点就是最小祖先。
701. 二叉搜索树中的插入操作
https://leetcode.cn/problems/insert-into-a-binary-search-tree/description/

public TreeNode insertIntoBST(TreeNode root, int val) {
        if (root == null) return new TreeNode(val);
        insertHelper(root,val);
        return root;
    }
    public void insertHelper(TreeNode node,int val){
        if (val < node.val){
            if (node.left != null){
                insertHelper(node.left,val);
            }else {
                node.left = new TreeNode(val);
            }
        }else {
            if (node.right != null){
                insertHelper(node.right,val);
            }else {
                node.right = new TreeNode(val);
            }
        }
    }

总结:我没有考虑转换树形结构的问题,我只是找到位置然后插入,前序遍历,看当前节点如果 val应该在node左边且node的left还为null,就插进去,这种遍历。

标签:node,TreeNode,val,root,二叉,搜索,return,null,树中
From: https://www.cnblogs.com/jeasonGo/p/18114146

相关文章

  • 搜索引擎-03-搜索引擎原理
    拓展阅读搜索引擎-01-概览搜索引擎-02-分词与全文索引搜索引擎-03-搜索引擎原理Crawlhtmlunit模拟浏览器动态js爬虫入门使用简介Crawljsoup爬虫使用jsoup无法抓取动态js生成的内容CrawlWebMagic爬虫入门使用简介webmagic全网搜索引擎架构与流程如何?全网搜索......
  • 二叉树的高效非递归层次遍历:一种O(n)时间复杂度与固定空间复杂度的解决方案
    @TOC在计算机科学中,二叉树是一种非常重要的数据结构,它在算法设计和问题解决中扮演着关键角色。本文将探讨如何使用非递归方法遍历一个给定的二叉树,并在不修改树结构的前提下,输出每个节点的关键字。这个过程将在O(n)的时间复杂度内完成,并且只使用固定量的额外存储空间。1.......
  • 稀碎从零算法笔记Day37-LeetCode:所有可能的真二叉树
    今天的每日一题,感觉理解的还不够深,有待加深理解题型:树、分治、递归链接:894.所有可能的真二叉树-力扣(LeetCode)来源:LeetCode题目描述给你一个整数 n ,请你找出所有可能含 n 个节点的 真二叉树 ,并以列表形式返回。答案中每棵树的每个节点都必须符合 Node.val==0 ......
  • leetcode每日一题 1379. 找出克隆二叉树中的相同节点
    问题描述给你两棵二叉树,原始树original和克隆树cloned,以及一个位于原始树original中的目标节点target。其中,克隆树cloned是原始树original的一个副本。请找出在树cloned中,与target相同的节点,并返回对该节点的引用(在C/C++等有指针的语言中返回节点指针,其他......
  • 二叉树
    <!DOCTYPEhtml><htmllang="en"><head>  <metacharset="UTF-8">  <metahttp-equiv="X-UA-Compatible"content="IE=edge">  <metaname="viewport"content="width=d......
  • LeetCode-1379. 找出克隆二叉树中的相同节点【树 深度优先搜索 广度优先搜索 二叉树】
    LeetCode-1379.找出克隆二叉树中的相同节点【树深度优先搜索广度优先搜索二叉树】题目描述:解题思路一:递归,由于我们比较的是节点而不是节点值(例如C++比较的是地址),所以下面的代码也适用于树中有值相同节点的情况(本题的进阶问题)。解题思路二:递归这题有几个关键点,一:判......
  • 纯小白蓝桥杯备赛笔记--DAY9(搜索)
    文章目录三道例题学会DFS剪枝什么是剪枝数字王国之军训排队--2942特殊的三角形--3008特殊的多边形--3075DFS基础回溯简介回溯法模版例题N皇后--1508小朋友崇拜圈--182全球变暖--178记忆化搜索简介斐波那契数列混境之地5-3820地宫取宝-216三道例题学会DFS剪枝什......
  • 15天【代码随想录算法训练营34期】第六章 二叉树 part02(● 层序遍历 10 ● 226.翻
    层序遍历10102.二叉树的层序遍历(opensnewwindow)#Definitionforabinarytreenode.#classTreeNode:#def__init__(self,val=0,left=None,right=None):#self.val=val#self.left=left#self.right=rightclassSolution......
  • 淘宝API接口系列,商品详情数据丨搜索商品列表丨商品评论(可测试)
    淘宝API接口系列提供了丰富的功能,包括商品详情数据获取、搜索商品列表以及商品评论等。这些接口对于开发者来说,是实现各种电商应用的关键工具。请求示例,API接口接入Anzexi58结尾有响应示例.... 对于商品详情数据接口,淘宝开放平台提供了相应的API,允许开发者通过调用这些接口......
  • 搜索引擎-01-概览
    拓展阅读搜索引擎-01-概览搜索引擎-02-分词与全文索引搜索引擎-03-搜索引擎原理Crawlhtmlunit模拟浏览器动态js爬虫入门使用简介Crawljsoup爬虫使用jsoup无法抓取动态js生成的内容CrawlWebMagic爬虫入门使用简介webmagic详细介绍一下搜索引擎搜索引擎是一种......