LeetCode 654.最大二叉树 617合并二叉树 700二叉搜索树中的搜索 98验证二叉搜索树

news2025/7/19 0:09:18

文章目录

        • 654最大二叉树
          • c++代码实现
          • python 代码实现
        • 617合并二叉树
          • c++ 代码实现
          • python 代码实现
        • 700二叉搜索树中的搜索
          • c++代码实现
          • python 代码实现
        • 98验证二叉搜索树
          • c++ 代码实现
          • python 代码实现

654最大二叉树

给定一个不重复的整数数组 nums最大二叉树 可以用下面的算法从 nums 递归地构建:

  1. 创建一个根节点,其值为 nums 中的最大值。
  2. 递归地在最大值 左边子数组前缀上 构建左子树。
  3. 递归地在最大值 右边子数组后缀上 构建右子树。

返回 nums 构建的 *最大二叉树*

示例 1:

img

输入:nums = [3,2,1,6,0,5]
输出:[6,3,5,null,2,0,null,null,1]
解释:递归调用如下所示:
- [3,2,1,6,0,5] 中的最大值是 6 ,左边部分是 [3,2,1] ,右边部分是 [0,5] 。
    - [3,2,1] 中的最大值是 3 ,左边部分是 [] ,右边部分是 [2,1] 。
        - 空数组,无子节点。
        - [2,1] 中的最大值是 2 ,左边部分是 [] ,右边部分是 [1] 。
            - 空数组,无子节点。
            - 只有一个元素,所以子节点是一个值为 1 的节点。
    - [0,5] 中的最大值是 5 ,左边部分是 [0] ,右边部分是 [] 。
        - 只有一个元素,所以子节点是一个值为 0 的节点。
        - 空数组,无子节点。

示例 2:

img

输入:nums = [3,2,1]
输出:[3,null,2,null,1]

提示:

  • 1 <= nums.length <= 1000
  • 0 <= nums[i] <= 1000
  • nums 中的所有整数 互不相同
c++代码实现
/**
 * Definition for a binary tree node.
 * struct TreeNode {
 *     int val;
 *     TreeNode *left;
 *     TreeNode *right;
 *     TreeNode() : val(0), left(nullptr), right(nullptr) {}
 *     TreeNode(int x) : val(x), left(nullptr), right(nullptr) {}
 *     TreeNode(int x, TreeNode *left, TreeNode *right) : val(x), left(left), right(right) {}
 * };
 */
class Solution {
public:
    TreeNode * traversal(vector<int> & nums, int left, int right) {
        if (left >= right){
            return nullptr;
        }
        // 寻找分割点
        int maxIndex = left;
        for (int i = maxIndex + 1; i < right; i++) {
            if (nums[i] > nums[maxIndex]){
                maxIndex = i;
            }
        }
        // 根节点
        TreeNode * node = new TreeNode(nums[maxIndex]);
        // 连接
        node->left = traversal(nums, left, maxIndex);
        node->right = traversal(nums, maxIndex+1, right);

        return node;
    }
    TreeNode* constructMaximumBinaryTree(vector<int>& nums) {
        return traversal(nums, 0, nums.size());
    }
};
python 代码实现
# Definition for a binary tree node.
# class TreeNode:
#     def __init__(self, val=0, left=None, right=None):
#         self.val = val
#         self.left = left
#         self.right = right
class Solution:
    def traversal(self, nums, left, right):
        if left >= right:
            return None

        maxIndex = left
        for i in range(left+1, right):
            if nums[i] > nums[maxIndex]:
                maxIndex = i
        
        node = TreeNode(nums[maxIndex])

        node.left = self.traversal(nums, left, maxIndex)
        node.right = self.traversal(nums, maxIndex+1, right)

        return node

    def constructMaximumBinaryTree(self, nums: List[int]) -> Optional[TreeNode]:
        return self.traversal(nums, 0, len(nums))

617合并二叉树

给你两棵二叉树: root1root2

想象一下,当你将其中一棵覆盖到另一棵之上时,两棵树上的一些节点将会重叠(而另一些不会)。你需要将这两棵树合并成一棵新二叉树。合并的规则是:如果两个节点重叠,那么将这两个节点的值相加作为合并后节点的新值;否则,不为 null 的节点将直接作为新二叉树的节点。

返回合并后的二叉树。

注意: 合并过程必须从两个树的根节点开始。

示例 1:

img

输入:root1 = [1,3,2,5], root2 = [2,1,3,null,4,null,7]
输出:[3,4,5,5,4,null,7]

示例 2:

输入:root1 = [1], root2 = [1,2]
输出:[2,2]

提示:

  • 两棵树中的节点数目在范围 [0, 2000]
  • -104 <= Node.val <= 104
c++ 代码实现
/**
 * Definition for a binary tree node.
 * struct TreeNode {
 *     int val;
 *     TreeNode *left;
 *     TreeNode *right;
 *     TreeNode() : val(0), left(nullptr), right(nullptr) {}
 *     TreeNode(int x) : val(x), left(nullptr), right(nullptr) {}
 *     TreeNode(int x, TreeNode *left, TreeNode *right) : val(x), left(left), right(right) {}
 * };
 */
class Solution {
public:
    TreeNode* traversal(TreeNode* r1, TreeNode* r2) {
        // 如果r1为空了,则返回r2
        if (r1 == nullptr) return r2;
        if (r2 == nullptr) return r1;

        r1->val += r2->val;
        r1->left = traversal(r1->left, r2->left);
        r1->right = traversal(r1->right, r2->right);
        return r1;
    }
    TreeNode* mergeTrees(TreeNode* root1, TreeNode* root2) {
        return traversal(root1, root2);
    }
};
python 代码实现
# Definition for a binary tree node.
# class TreeNode:
#     def __init__(self, val=0, left=None, right=None):
#         self.val = val
#         self.left = left
#         self.right = right
class Solution:
    def mergeTrees(self, root1: Optional[TreeNode], root2: Optional[TreeNode]) -> Optional[TreeNode]:
        if not root1:
            return root2
        if not root2:
            return root1
        
        root1.val += root2.val
        root1.left = self.mergeTrees(root1.left, root2.left)
        root1.right = self.mergeTrees(root1.right, root2.right)
        return root1

700二叉搜索树中的搜索

给定二叉搜索树(BST)的根节点 root 和一个整数值 val

你需要在 BST 中找到节点值等于 val 的节点。 返回以该节点为根的子树。 如果节点不存在,则返回 null

示例 1:

img

输入:root = [4,2,7,1,3], val = 2
输出:[2,1,3]

示例 2:

img

输入:root = [4,2,7,1,3], val = 5
输出:[]

提示:

  • 数中节点数在 [1, 5000] 范围内
  • 1 <= Node.val <= 107
  • root 是二叉搜索树
  • 1 <= val <= 107
c++代码实现
/**
 * Definition for a binary tree node.
 * struct TreeNode {
 *     int val;
 *     TreeNode *left;
 *     TreeNode *right;
 *     TreeNode() : val(0), left(nullptr), right(nullptr) {}
 *     TreeNode(int x) : val(x), left(nullptr), right(nullptr) {}
 *     TreeNode(int x, TreeNode *left, TreeNode *right) : val(x), left(left), right(right) {}
 * };
 */
class Solution {
public:
    TreeNode* traversal(TreeNode * root, int val) {
        if (root == nullptr) {
            return nullptr;
        }
        if (root->val == val) {
            return root;
        }

        TreeNode * result = nullptr;
        // 二叉搜索树有序的,
        if (root->val > val) {
            result = traversal(root->left, val);
        }

        if (root->val < val) {
            result = traversal(root->right, val);
        }
        return result;
    }
    TreeNode* searchBST(TreeNode* root, int val) {
        return traversal(root, val);
    }
};
python 代码实现
# Definition for a binary tree node.
# class TreeNode:
#     def __init__(self, val=0, left=None, right=None):
#         self.val = val
#         self.left = left
#         self.right = right
class Solution:
    def searchBST(self, root: Optional[TreeNode], val: int) -> Optional[TreeNode]:
        if not root:
            return None
        if root.val == val:
            return root
        
        result = None
        if root.val > val:
            result = self.searchBST(root.left, val)
        if root.val < val:
            result = self.searchBST(root.right, val)
        return result

98验证二叉搜索树

给你一个二叉树的根节点 root ,判断其是否是一个有效的二叉搜索树。

有效 二叉搜索树定义如下:

  • 节点的左子树只包含 小于 当前节点的数。
  • 节点的右子树只包含 大于 当前节点的数。
  • 所有左子树和右子树自身必须也是二叉搜索树。

示例 1:

img

输入:root = [2,1,3]
输出:true

示例 2:

img

输入:root = [5,1,4,null,null,3,6]
输出:false
解释:根节点的值是 5 ,但是右子节点的值是 4 。

提示:

  • 树中节点数目范围在[1, 104]
  • -231 <= Node.val <= 231 - 1
c++ 代码实现
/**
 * Definition for a binary tree node.
 * struct TreeNode {
 *     int val;
 *     TreeNode *left;
 *     TreeNode *right;
 *     TreeNode() : val(0), left(nullptr), right(nullptr) {}
 *     TreeNode(int x) : val(x), left(nullptr), right(nullptr) {}
 *     TreeNode(int x, TreeNode *left, TreeNode *right) : val(x), left(left), right(right) {}
 * };
 */
class Solution {
public:
    vector<int> vec;
    // 中序遍历
    void traversal(TreeNode* node) {
        if (node == nullptr) {
            return;
        }

        traversal(node->left);
        vec.push_back(node->val);
        traversal(node->right);
    }
    bool isValidBST(TreeNode* root) {
        traversal(root);
        for (int i = 1; i < vec.size(); i++) {
            if (vec[i] < vec[i-1]) {
                return false;
            }
        }
        return true;
    }
};
python 代码实现
# Definition for a binary tree node.
# class TreeNode:
#     def __init__(self, val=0, left=None, right=None):
#         self.val = val
#         self.left = left
#         self.right = right
class Solution:
    def __init__(self):
        self.res = []

    def traversal(self, root):
        if not root:
            return None
        
        self.traversal(root.left)
        self.res.append(root.val)
        self.traversal(root.right)


    def isValidBST(self, root: Optional[TreeNode]) -> bool:
        self.traversal(root)
        for i in range(1, len(self.res)):
            if (self.res[i] <= self.res[i-1]):
                return False
        return True

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

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

相关文章

[附源码]java毕业设计在线购物商城

项目运行 环境配置&#xff1a; Jdk1.8 Tomcat7.0 Mysql HBuilderX&#xff08;Webstorm也行&#xff09; Eclispe&#xff08;IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持&#xff09;。 项目技术&#xff1a; SSM mybatis Maven Vue 等等组成&#xff0c;B/S模式 M…

[附源码]java毕业设计疫情居家隔离服务系统

项目运行 环境配置&#xff1a; Jdk1.8 Tomcat7.0 Mysql HBuilderX&#xff08;Webstorm也行&#xff09; Eclispe&#xff08;IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持&#xff09;。 项目技术&#xff1a; SSM mybatis Maven Vue 等等组成&#xff0c;B/S模式 M…

阿里云与信通院邀您参与云原生安全用户调研

云原生安全建设已经成为企业云原生平台建设、应用云原生化改造进程中的必备项。在云原生的大势所趋下&#xff0c;云的分布式架构、容器化部署、边界消失等特点也带来了有别于传统硬件安全的模式&#xff1a;镜像漏洞、容器逃逸、租户隔离等安全问题威胁着企业的云原生平台和应…

Unity动态创建Avatar骨骼映射

目录前言1 了解Avatar骨骼映射2 动态创建Avatar骨骼映射2.1 寻找相关APIAvatarBuilder.BuildHumanAvatarDeclarationParametersReturnsDescriptionHumanDescriptionDescriptionProperties2.2 创建Skeleton数据2.3 创建Human映射关系2.4 创建Avatar3 总结前言 为了让单个动画可…

Linux(基于Centos7)(四)

文章目录一、任务目标二、任务资讯三、任务实施3-1.RPM软件包管理3-2.YUM方式安装软件一、任务目标 实施该工单的任务目标如下&#xff1a; 知识目标 1.了解RPM提供的功能。 2.了解YUM相对于RPM所具有的优点。 能力目标 1.能够通过RPM安装及管理软件包。 2.能够通过YUM安装及管…

MCE | ATM 激酶活化变单体后的神奇开挂!

ATM (Ataxia-telangiectasia mutated proteins) 是一种丝氨酸-苏氨酸蛋白激酶&#xff0c;是 DNA 损伤应答 (DDR) 的关键调节因子。ATM 是位名副其实的“指挥官”&#xff0c;在 DNA 双链断裂 (DSB) 中&#xff0c;参与细胞周期检查点维护、DNA 损伤修复和端粒维护等&#xff0…

基于Android的个人健康管理系统

目 录 基于Android的个人健康管理系统 Personal Health Management System Based On Android 1 引言 1 1.1 课题背景 1 1.2 编写目的 1 1.3 关于Android 1 1.4 关于MVC框架 3 2 可行性研究 6 2.1 技术可行性 6 2.2 经济可行性 6 2.3 时间可行性 6 3 需求分析 7 4 总体设计 8 …

栈——算法专项刷题(六)

六、栈 6.1后缀表达式 原题链接 根据 逆波兰表示法&#xff0c;求该后缀表达式的计算结果。 有效的算符包括 、-、*、/ 。每个运算对象可以是整数&#xff0c;也可以是另一个逆波兰表达式。 说明&#xff1a; 整数除法只保留整数部分。给定逆波兰表达式总是有效的。换句话…

【kafka】五、kafka工作流程

kafka工作流程 工作流程 kafka中消息是以topic进行分类的&#xff0c;生产者生产消息&#xff0c;消费者消费消息&#xff0c;都是面向topic的。 topic是逻辑上的概念&#xff0c;而partition是物理上的概念&#xff0c;每一个partition对应一个log文件&#xff0c;该log文件…

基建融资与预算软约束(2015年A股大牛市与“流动性堰塞湖”)-中国视角下的宏观经济

基建融资与预算软约束(2015年A股大牛市与“流动性堰塞湖”) – 潘登同学的宏观经济学笔记 文章目录基建融资与预算软约束(2015年A股大牛市与“流动性堰塞湖”) -- 潘登同学的宏观经济学笔记2015年A股大牛市定向宽松的货币政策导向定向宽松的货币政策原因投资项目的预算软约束政…

python基础之循环嵌套

文章目录一、break和continue二、while的循环嵌套知识点print:例题1打印星星&#xff1a;例题2打印九九乘法表一、break和continue break当某一条件满足时直接跳出当前循环&#xff1b; continue当某一条满足时&#xff0c;不执行后续循环重新开始新一轮循环&#xff1b; i1 …

[附源码]java毕业设计婴幼儿玩具共享租售平台

项目运行 环境配置&#xff1a; Jdk1.8 Tomcat7.0 Mysql HBuilderX&#xff08;Webstorm也行&#xff09; Eclispe&#xff08;IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持&#xff09;。 项目技术&#xff1a; SSM mybatis Maven Vue 等等组成&#xff0c;B/S模式 M…

python基础之字典

文章目录一、字典1.dictionary(字典)2.和列表的区别&#xff1a;二、实例三、应用场景一、字典 1.dictionary(字典) 是除了列表之外最灵活的数据类型&#xff0c;字典同样可以用来存储多个数据&#xff08;通常用于存储描述一个物体的相关信息&#xff09;&#xff1b; 2.和…

数据分析软件的使用

一 数据分析概述 1 概念 数据分析是利用数学&#xff0c;统计学理论相结合的科学统计分析方法&#xff0c;对Excel数据&#xff0c;数据库中的数据&#xff0c;收集的大量数据&#xff0c;网页抓取的数据进行分析&#xff0c;从中提前有价值的信息并形成结论进行展示的过程。…

用于调整PID控制器增益的遗传算法的实现(Matlab代码实现)

&#x1f352;&#x1f352;&#x1f352;欢迎关注&#x1f308;&#x1f308;&#x1f308; &#x1f4dd;个人主页&#xff1a;我爱Matlab &#x1f44d;点赞➕评论➕收藏 养成习惯&#xff08;一键三连&#xff09;&#x1f33b;&#x1f33b;&#x1f33b; &#x1f34c;希…

第八章 兼容多种模块标准的软件包封装

第八章 如何封装兼容多种JS模块标准的软件包&#xff1f; 为了方便用户使用&#xff0c;一款成熟的类库都会提供多种模块封装形式&#xff0c;比如大家最常用到的 Vue&#xff0c;就提供了cjs、esm、umd 等多种封装模式&#xff0c;并且还会提供对应的压缩版本&#xff0c;方便…

Python异或运算符示例

目录 异或 异或的性质 示例1&#xff1a;值交换 示例2&#xff1a;找出现一次的元素 示例2代码&#xff1a; 异或 英文为exclusive OR&#xff0c;缩写成xor&#xff0c;符号是^ aba^b0假0假0假0假1真1真1真0假1真1真1真0假 异或的性质 1、a ^ a0 任何数字和自己异或结…

Java项目:JSP蛋糕甜品店管理系统

作者主页&#xff1a;源码空间站2022 简介&#xff1a;Java领域优质创作者、Java项目、学习资料、技术互助 文末获取源码 项目介绍 本项目分为前后台&#xff0c;分为管理员与普通用户两种角色&#xff0c;管理员登录后台&#xff0c;普通用户登录前台&#xff1b; 管理员角色…

Zookeeper

文章目录Zk介绍特点数据结构应用场景Zk安装、集群下载、启动配置参数解读Zookeeper 集群操作选举机制&#xff08;面试重点&#xff09;客户端命令行操作客户端界面节点类型&#xff08;持久 / 短暂 / 有序号 / 无序号&#xff09;监听器1&#xff09;节点的值变化监听2&#x…

【通信】基于matlab模拟室内VLC模型(含BER和SNR)附matlab代码

✅作者简介&#xff1a;热爱科研的Matlab仿真开发者&#xff0c;修心和技术同步精进&#xff0c;matlab项目合作可私信。 &#x1f34e;个人主页&#xff1a;Matlab科研工作室 &#x1f34a;个人信条&#xff1a;格物致知。 更多Matlab仿真内容点击&#x1f447; 智能优化算法 …