Leetcode每日一题6.05:二叉树搜索树BST

news2024/9/25 17:17:47

二叉搜索树(BST)

根节点大于等于左子树所有节点,小于等于右子树所有节点。
二叉搜索树中序遍历即为节点从小到大排序。

230. 二叉搜索树中第K小的元素

题目描述:
给定一个二叉搜索树的根节点 root ,和一个整数 k ,请你设计一个算法查找其中第 k 个最小元素(从 1 开始计数)。

示例:
在这里插入图片描述

代码题解:

// 中序遍历
class Solution {
    int cnt = 0;
    int val;
public:
    int kthSmallest(TreeNode* root, int k) {
        kth(root, k);
        return val;
    }
    void kth(TreeNode* root, int k) {
        if (root == nullptr) return;

        kth(root -> left, k);  // 左
        cnt++;  // 记录是第几小
        if (cnt == k) {
            val = root -> val;   // 根
            return;
        }
        kth(root -> right, k);  // 右

    }
};
// 递归法
public int kthSmallest(TreeNode root, int k) {
    int leftCnt = count(root.left);
    if (leftCnt == k - 1) return root.val;
    if (leftCnt > k - 1) return kthSmallest(root.left, k);
    return kthSmallest(root.right, k - leftCnt - 1);
}

private int count(TreeNode node) {
    if (node == null) return 0;
    return 1 + count(node.left) + count(node.right);
}

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

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

示例:
在这里插入图片描述

代码题解:

class Solution {
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;
    }
};

108. 将有序数组转换为二叉搜索树

题目描述:
给你一个整数数组 nums ,其中元素已经按 升序 排列,请你将其转换为一棵 高度平衡 二叉搜索树。
高度平衡 二叉树是一棵满足「每个节点的左右两个子树的高度差的绝对值不超过 1 」的二叉树。

示例:
在这里插入图片描述
思路:
对于已经升序排列的数组,之后的根节点肯定是最中间元素,再增加两个参数来控制左子树节点和右子树节点。

代码题解:

class Solution {
public:
    TreeNode* sortedArrayToBST(vector<int>& nums) {
        return toBST(nums, 0, nums.size() - 1);
    }
    TreeNode* toBST(vector<int>& nums, int l, int r) {
        if (l > r) return nullptr;
        int m = (l + r) / 2;  // 先找到根节点
        // 利用m填节点值
        TreeNode* root = new TreeNode(nums[m]);
        root -> left = toBST(nums, l, m-1);  // m-1 从中间往左移
        root -> right = toBST(nums, m+1, r); // m+1 从中间往右移
        return root;
    }
};

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1130967.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

tcpdump 异常错误

tcpdump 进行抓包的时候&#xff0c;-w 提示 Permission denied&#xff1a; sudo tcpdump -w test1.log tcpdump: test1.log: Permission denied 开始以为是用户权限的问题&#xff0c;后来换用 root 账户还是不行&#xff0c;经搜索&#xff0c;是 AppArmor 的问题。 解决方…

一台服务器成了哆啦A梦的神奇口袋

如果我有一台服务器&#xff0c;那简直就像打开了哆啦A梦的神奇口袋&#xff01;可以做的事情可太多啦&#xff0c;比如&#xff1a; 学习和探险 首先嘛&#xff0c;当然是用来学习和探险啦&#xff01;我可以安装和配置各种操作系统、编程语言和工具&#xff0c;深入了解计…

优优嗨聚集团:美团外卖,让美好儿童餐计划触手可及

在当今这个快节奏的社会&#xff0c;父母们对于孩子的饮食健康越来越关注。如何让孩子吃得健康、吃得安心&#xff0c;是每一个家长都非常关心的问题。而美团外卖&#xff0c;作为中国最大的外卖平台之一&#xff0c;一直在积极推动美好儿童餐计划&#xff0c;让家长们能够更方…

docker(2)部署前后端分离springboot+vue项目

前置知识 虚拟网桥 docker容器需要在同一个网段才能通信&#xff0c;当启动一个容器时会自动连接一个docker中默认网桥段但此默认网桥段非本容器固定&#xff0c;当下次容器启动分配的ip会变&#xff0c;并且不可用名称直接访问。 自定义网段将需要互通的容器放入&#xff0c…

容联七陌入选沙利文2023中国AI技术变革典型企业

近日&#xff0c;全球增长咨询公司弗若斯特沙利文&#xff08;Frost & Sullivan&#xff0c;简称“沙利文”&#xff09;发布《2023年中国AI技术变革企业服务白皮书》&#xff0c;白皮书显示&#xff0c;容联七陌以大模型为支撑&#xff0c;通过生成式一体化智能客服全方位…

首枚开源社正式成员纪念徽章来啦

各位尊敬的开源社正式成员&#xff1a; 2023年10月16日&#xff0c;开源社刚过完第九个成立生日&#xff0c;开源社与您共同迎接第十年的到来&#xff01; 首枚开源社正式成员纪念徽章&#xff0c;满载作为开源人的归属感和荣誉感&#xff0c;设计上我们采用开源社 logo 的经典…

【Java集合类面试十八】、ConcurrentHashMap是怎么分段分组的?

文章底部有个人公众号&#xff1a;热爱技术的小郑。主要分享开发知识、学习资料、毕业设计指导等。有兴趣的可以关注一下。为何分享&#xff1f; 踩过的坑没必要让别人在再踩&#xff0c;自己复盘也能加深记忆。利己利人、所谓双赢。 面试官&#xff1a;ConcurrentHashMap是怎么…

使用BASE64实现编码和解码

系列文章目录 SpringBoot整合RabbitMQ并实现消息发送与接收 解析JSON格式参数 & 修改对象的key VUE整合Echarts实现简单的数据可视化 Java中运用BigDecimal对字符串的数值进行加减乘除等操作 List&#xff1c;HashMap&#xff1c;String,String&#xff1e;&#xff1e;实…

如何在Puppeteer中设置User-Agent来绕过京东的反爬虫机制?

概述 京东作为中国最大的电商平台&#xff0c;为了保护其网站数据的安全性&#xff0c;采取了一系列的反爬虫机制。然而&#xff0c;作为开发者&#xff0c;我们可能需要使用爬虫工具来获取京东的数据。 正文 Puppeteer 是一个由 Google 开发的 Node.js 库&#xff0c;它提供…

【无标题】读书笔记之《智能化社会:未来人们如何生活、相爱和思考》

《智能化社会&#xff1a;未来人们如何生活、相爱和思考》&#xff1a;Digital vs Human_ how well live, love, and think in the future &#xff0c;由中信出版社于2017年06月出版。作者是澳大利亚的理查德沃特森(Richard Watson)。Richard Watson在伦敦帝国理工学院从事未来…

国债1万亿,你该学点什么

what: 底层逻辑&#xff1a;国家信用向社会募资 why&#xff1a; ① 战争时代-筹措military purpose ② 平衡财政收支&#xff08;大部分时期都是deficit的状态&#xff0c;一般方法有levy.taxing,print money,national debt&#xff0c;当taxing与print money都困难的时候&a…

【Java集合类面试二十】、请介绍LinkedHashMap的底层原理

文章底部有个人公众号&#xff1a;热爱技术的小郑。主要分享开发知识、学习资料、毕业设计指导等。有兴趣的可以关注一下。为何分享&#xff1f; 踩过的坑没必要让别人在再踩&#xff0c;自己复盘也能加深记忆。利己利人、所谓双赢。 面试官&#xff1a;请介绍LinkedHashMap的底…

什么是React中的高阶组件(Higher Order Component,HOC)?它的作用是什么?

聚沙成塔每天进步一点点 ⭐ 专栏简介 前端入门之旅&#xff1a;探索Web开发的奇妙世界 欢迎来到前端入门之旅&#xff01;感兴趣的可以订阅本专栏哦&#xff01;这个专栏是为那些对Web开发感兴趣、刚刚踏入前端领域的朋友们量身打造的。无论你是完全的新手还是有一些基础的开发…

shopee商品链接获取shopee商品评论数据(用 Python实现shopee商品评论信息抓取)

在网页抓取方面&#xff0c;可以使用 Python、Java 等编程语言编写程序&#xff0c;通过模拟 HTTP 请求&#xff0c;获取shopee网站上的商品详情页面评论内容。在数据提取方面&#xff0c;可以使用正则表达式、XPath 等方式从 HTML 代码中提取出有用的信息。值得注意的是&#…

Linux系统安装redis并配置为服务

一、Linux环境 1、下载 官网提供的源码下载地址&#xff1a; https://github.com/redis/redis/archive/7.0.5.tar.gz 2、将源码上传至服务器 3、解压缩 # 将解压缩后的文件放置在同目录的source文件夹下 tar -zxvf redis-7.0.5.tar.gz -C ./source4、编译安装 对源码进行编…

【微信小程序】数字化会议OA系统之投票模块(附源码)

&#x1f389;&#x1f389;欢迎来到我的CSDN主页&#xff01;&#x1f389;&#x1f389; &#x1f3c5;我是Java方文山&#xff0c;一个在CSDN分享笔记的博主。&#x1f4da;&#x1f4da; &#x1f31f;推荐给大家我的专栏《微信小程序开发实战》。&#x1f3af;&#x1f3a…

有粉丝被机器视觉培训机构忽悠培训贷款

最近有13个粉丝私下联系我&#xff0c;咨询我培训贷款&#xff0c;当时我听了&#xff0c;挺懵的。我详细了解后&#xff0c;我上大学毕业的时候&#xff0c;也遇到过此类学校鼓励我们去培训。合理维权&#xff0c;切不可采用极端手段&#xff0c;生命比什么都重要。不要做傻事…

Vue-dvadmin-d2-crud-plus-自定义后台菜单-添加页面

文章目录 1.新建数据模型2.新建数据序列类3.新建数据视图4.配置路由5.前端新建View组件6.配置后台7.总结 django-vue-admin是一套全部开源的快速开发平台&#xff0c;毫无保留给个人及企业免费使用。 &#x1f9d1;‍&#x1f91d;‍&#x1f9d1;前端采用D2Admin 、Vue、Eleme…

搭建nuxt3项目(框架构建)

需求 目标&#xff1a;我想搭建一个nuxt3的框架&#xff0c;实现一些基本的组件和路由、页面&#xff0c;方便后续遇到相关ssr项目直接复用。 同时&#xff1a;记录关于nuxt3的使用介绍关于Nuxt&#xff08;详解以及周边&#xff09; Nuxt 框架 1、一种基于 Node.js 的服务端…

Java-多线程进阶

文章目录 Java多线程进阶锁的类型乐观锁vs悲观锁读写锁重量级锁vs轻量级锁自旋锁公平锁vs非公平锁可重入锁vs不可重入锁 CASCAS介绍和原理CAS应用自旋锁CAS 的 ABA 问题 Synchronized 原理Callable 接口JUC常见类ReentrantLock原子类线程池信号量 SemaphoreCountDownLatch 线程…