剑指 Offer II 052——展平二叉搜索树

news2024/9/30 15:24:00

文章目录

  • 题目详情
    • 示例1
    • 示例二
  • 方法一:中序遍历之后生成新的树
    • Java完整代码实现
  • 方法二:在中序遍历的过程中改变节点指向
    • Java完整代码实现

题目详情

剑指 Offer II 052——展平二叉搜索树
给你一棵二叉搜索树,请 按中序遍历 将其重新排列为一棵递增顺序搜索树,使树中最左边的节点成为树的根节点,并且每个节点没有左子节点,只有一个右子节点。
对于二叉搜索树的更多内容,请查看我的二叉搜索树(BST)详解博文

示例1

在这里插入图片描述

示例二

在这里插入图片描述

方法一:中序遍历之后生成新的树

先使用中序遍历二叉搜索树,获得递增的数值排列,再遍历排列新建一棵展开的二叉搜索树。

Java完整代码实现

/**
 * Definition for a binary tree node.
 * public class TreeNode {
 *     int val;
 *     TreeNode left;
 *     TreeNode right;
 *     TreeNode() {}
 *     TreeNode(int val) { this.val = val; }
 *     TreeNode(int val, TreeNode left, TreeNode right) {
 *         this.val = val;
 *         this.left = left;
 *         this.right = right;
 *     }
 * }
 */
class Solution {
    public TreeNode increasingBST(TreeNode root) {
        ArrayList<Integer> list = new ArrayList<>();
        
        inorderBST(root, list);  // 获得中序遍历结果
        TreeNode head = new TreeNode(0);
        TreeNode p = head;

        for (Integer a : list) {
            TreeNode treeNode = new TreeNode(a);
            p.right = treeNode;
            p = p.right;
        }
        return head.right;
    }

    public static void inorderBST(TreeNode root, ArrayList list) {
        if (root != null) {
            inorderBST(root.left, list);
            list.add(root.val);
            inorderBST(root.right, list);
        }
    }
}

方法二:在中序遍历的过程中改变节点指向

直接看代码吧,就是在中序遍历中处理指向。

Java完整代码实现

/**
 * Definition for a binary tree node.
 * public class TreeNode {
 *     int val;
 *     TreeNode left;
 *     TreeNode right;
 *     TreeNode() {}
 *     TreeNode(int val) { this.val = val; }
 *     TreeNode(int val, TreeNode left, TreeNode right) {
 *         this.val = val;
 *         this.left = left;
 *         this.right = right;
 *     }
 * }
 */
class Solution {
    private TreeNode p;  // 私有变量,类方法都可以访问
    public TreeNode increasingBST(TreeNode root) {
        TreeNode head = new TreeNode(0);
        p = head;
        inorderBST(root);
        return head.right;
    }
    public void inorderBST(TreeNode root) {
        if (root != null) {
            inorderBST(root.left);
            // 在这里处理就行了
            p.right = root;
            root.left = null;
            p = root;
            inorderBST(root.right);
        }
    }
}

ps:计划每日更新一篇博客,今日2023-05-03,日更第十七天。
昨日更新:
二叉搜索树(BST)详解

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

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

相关文章

Matlab2012a的图像处理工具箱的imshow函数

在处理图片文件时&#xff0c;除了使用matlab自带的image函数&#xff0c;还可以考虑用matlab的图像处理工具箱。这个工具箱提供了imshow和imtool两个函数&#xff0c;可实现图片的显示。 这两个函数都支持Handle Graphics体系结构&#xff0c;它们可创建图像对象&#xff0c;…

【AWS入门】AWS CICD

目录 一 .TASK二. 环境准备IAM创建存储库ec2-repoec2-wp 三. Code Deploy创建应用程序创建部署组创建管道部署后的ec2-wp 一 .TASK 创建2台EC2实例&#xff0c;一台名为「ec2-repo」&#xff0c;用作开发环境&#xff0c;将编写好的代码提交至repository(需安装git)&#xff0…

二十六、ISIS技术总结

文章目录 ISIS 概述一、路由协议总结1、路由优先级2、分类 二、ISIS 协议特点1、特点2、ISIS 路由器的种类 三、ISIS 配置1、基础配置2、network-entity含义3、router id 和系统id转换规则 四、ISIS 开销计算1、Narrow 模式2、Wide 模式 五、 ISIS 和 OSPF 的区别 ISIS 概述 I…

TortoiseGit提示No supported authentication methods available异常

TortoiseGit他属于git的客户端&#xff0c;可有可无&#xff0c;说白了就是将git命令给我们整理成了可直接操作的按钮。 本地代码是使用了SSH的方式去拉取的代码&#xff0c;但是通过TortoiseGit pull代码的时候发生了如下异常&#xff0c;而GitBash却可以正常使用。 TortoiseG…

机器学习技术-激活函数

激活函数 作用 f(*)称为激活函数或激励函数&#xff08;Activation Function&#xff09;&#xff0c;激活函数的主要作用是完成数据的非线性变换&#xff0c;解决线性模型的表达、分类能力不足的问题;如果网络中都是线性变换&#xff0c;则多层网络可以通过矩阵变换&#xf…

C6678学习-EDMA

文章目录 1、简介1. EDMA3概述2、EDMA3的组成3、EDMA3的工作流程4、EDMA3通道控制器&#xff08;EDMA3CC&#xff09;5、触发方式 2、EDMA3的传输1、传输数据块的定义2、传输类型3、参数PaRAM4、通道5、OPT参数 3、补充1、EDMA3通道控制器区域 1、简介 1. EDMA3概述 基于C66x…

车载滤波器组件焊锡开裂失效分析

案例背景 车载滤波器组件在可靠性试验后&#xff0c;主板上的插件引脚焊点发生开裂异常。 分析过程 焊点外观 说明&#xff1a;插件器件引脚呈现出明显的焊点开裂状态。 X-RAY检测 针对异常焊点的X-RAY检测&#xff1a; 说明&#xff1a;通孔&#xff08;支撑孔&#xff09;的透…

如何用ChatGPT做项目管理?

ChatGPT可以通过创建和维护跨团队项目协作计划&#xff0c;让员工更容易理解他们的角色和职责。这个协作计划里面会包括每个团队或个人要执行的具体任务&#xff0c;每个任务最后期限和任何事情之间的依赖关系。 该场景对应的关键词库&#xff1a;&#xff08;24个&#xff09…

springboot框架开发医院云HIS 住院医生站、住院护士站功能实现

住院医生站主模块&#xff1a;包括医嘱管理、病案首页、分配入科、住院清单、我的质控等子模块 &#xff08;1&#xff09;医嘱管理功能简介 ①住院患者开立医嘱、支持医嘱复制、停止、作废等操作&#xff1b; ②医嘱类型含药品、项目、材料、嘱托&#xff1b; ③支持住院各…

(2022 IV) RCBEV

这篇是清华大学发表在IV&#xff08;IEEE Transactions on Intelligent Vehicles&#xff09;上的文章: Bridging the view disparity between radar and camera features for multi-modal fusion 3d object detection 文章信息讲得比较细致&#xff0c;非常值得一看&#xff…

【人工智能】— 不确定性、先验概率/后验概率、概率密度、贝叶斯法则、朴素贝叶斯 、最大似然估计

【人工智能】— 不确定性 不确定性不确定性与理性决策基本概率符号先验概率(无条件概率)/后验概率(条件概率)随机变量概率密度联合概率分布公理完全联合分布概率演算独立性 贝叶斯法则例1例2 使用贝叶斯规则&#xff1a;合并证据朴素贝叶斯最大似然估计小结 不确定性 不确定性与…

osg::Drawable类通过setDrawCallback函数设置回调函数的说明

osg::Drawable类可以通过该类的setDrawCallback函数设置回调函数类对象。被设置的回调类对象必须从osg::Drawable::DrawCallback类派生&#xff0c;并重写drawImplementation函数&#xff0c;以实现自己特定的需求。这个回调函数每次在帧事件中都会被调用(如&#xff1a;在帧的…

SpringBoot定义优雅全局统一Restful API 响应框架二

这里解决之前留下来的问题&#xff0c;当程序没有正常返回时候 就是程序由于运行时异常导致的结果&#xff0c;有些异常我们可&#xff0c;能无法提前预知&#xff0c;不能正常走到我们return的R对象返回。这个时候该如何处理 在SpringBoot中&#xff0c;可以使用ControllerA…

AI 作画火了,如何用 Serverless 函数计算部署 Stable Diffusion?

作者&#xff1a;寒斜 立即体验基于函数计算部署 Stable Diffusion&#xff1a; https://developer.aliyun.com/topic/aigc AIGC 领域目前大火&#xff0c; 除了 Chatgpt&#xff0c;在文生图领域 Stable Diffusion 大放异彩&#xff0c;深刻的地影响着绘画、视频制作等相关…

古剑飞仙手游Linux系统服务器架设教程

安装宝塔直接运行命令即可。 yum install -y wget && wget -O install.sh http://download.bt.cn/install/install_6.0.sh && sh install.sh 搭建环境&#xff1a; centos 7以上系统服务器 宝塔面板安装应用如下&#xff1a; Nginx1.14 mysql5.7 php5.6 1…

HNU-操作系统OS-实验Lab1

OS_Lab1_Experimental report 湖南大学信息科学与工程学院 计科 210X wolf &#xff08;学号 202108010XXX&#xff09; 为了实现 lab1 的目标&#xff0c;lab1 提供了 6 个基本练习和 1 个扩展练习&#xff0c;要求完成实验报告。 对实验报告的要求&#xff1a; 基于 mark…

【CSS笔记】CSS动画效果(2d、3d)之渐变色、过渡、变换、平移、缩放、旋转、倾斜、关键帧动画

这篇文章&#xff0c;主要介绍CSS动画效果&#xff08;2d、3d&#xff09;之渐变色、过渡、变换、平移、缩放、旋转、倾斜、关键帧动画。 目录 一、2d动画 1.1、渐变色 &#xff08;1&#xff09;线性渐变色 &#xff08;2&#xff09;径向渐变色 &#xff08;3&#xff0…

SpringBoot 基础

一、简介 SpringBoot用来简化Spring应用的初始搭建和开发过程&#xff0c; SpringBoot四大核心&#xff1a; 自动配置 起步依赖 Actuator 命令行界面 二、入门案例 1. 基于IDEA创建步骤 ① 创建新模块&#xff0c;选择Spring Initializr&#xff0c;并配置模块相关基础信息…

AI和GPT之间什么关系,GPT怎么推动AI发展

AI&#xff08;人工智能&#xff09;和GPT&#xff08;Generative Pre-trained Transformer&#xff09;都是与计算机技术相关的术语&#xff0c;但它们代表着不同层次的概念。以下是它们之间的区别&#xff1a; 定义&#xff1a; AI是指任何类型的计算机科学&#xff0c;如机…

【AWS入门】AWS Lamda

目录 创建一个Lamda函数用Lamda函数控制启停EC2实例创建一台EC2实例创建角色创建lamda函数 使用Amazon EventBridge计划启停实例创建EventBridge 用户往S3存储桶上传图片文件&#xff0c;触发Lambda函数&#xff0c;将图片压缩并上传至另一个存储桶创建两个存储桶通过Cloudform…