牛客刷题二叉树(三)

news2024/12/23 12:22:03

1.输出二叉树的右视图

import java.util.*;


public class Solution {
    /**
     * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
     *
     * 求二叉树的右视图
     * @param preOrder int整型一维数组 先序遍历
     * @param inOrder int整型一维数组 中序遍历
     * @return int整型一维数组
     */
    public int[] solve (int[] preOrder, int[] inOrder) {
        // write code here
        List<Integer> list = new ArrayList<>();
        TreeNode root = createOneTree(preOrder, inOrder, 0, preOrder.length - 1, 0);
        layerOrder(root, list);
        int[] ans = new int[list.size()];
        for (int i = 0; i < list.size(); i++) {
            ans[i] = list.get(i);
        }
        return ans;
    }
    public TreeNode createOneTree(int[] preOrder, int[] inOrder, int left,
                                  int right, int preIndex) {
        if (left > right) return null;
        if (left == right) return new TreeNode(preOrder[preIndex]);
        int item = preOrder[preIndex];
        TreeNode node = new TreeNode(preOrder[preIndex]);
        for(int i=left;i<=right;i++){
            if(inOrder[i]==item){
                node.left=createOneTree(preOrder,inOrder,left,i-1,preIndex+1);
                node.right=createOneTree(preOrder,inOrder,i+1,right,preIndex+(i-left+1));
                break;
            }
        }
        return node;
    }
    public void layerOrder(TreeNode root, List<Integer> list) {
        if (root == null) return;
        List<TreeNode> nodeList = new ArrayList<>();
        nodeList.add(root);
        while (!nodeList.isEmpty()){
            int size=nodeList.size();
            list.add(nodeList.get(nodeList.size()-1).val);
            for(int i=0;i<size;i++){
                TreeNode remove = nodeList.remove(0);
                if(remove.left!=null) nodeList.add(remove.left);
                if(remove.right!=null) nodeList.add(remove.right);
            }
        }
    }
}
class TreeNode {
    int val = 0;
    TreeNode left = null;
    TreeNode right = null;
    public TreeNode(int val) {
        this.val = val;
    }
}

2.重建二叉树

import java.util.*;

/*
 * public class TreeNode {
 *   int val = 0;
 *   TreeNode left = null;
 *   TreeNode right = null;
 *   public TreeNode(int val) {
 *     this.val = val;
 *   }
 * }
 */

public class Solution {
    /**
     * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
     *
     *
     * @param preOrder int整型一维数组
     * @param vinOrder int整型一维数组
     * @return TreeNode类
     */
    public TreeNode reConstructBinaryTree (int[] preOrder, int[] vinOrder) {
        // write code here
        return createTree(preOrder,vinOrder,0, preOrder.length-1,0);
    }
    public TreeNode createTree(int[] preOrder, int[] vinOrder,int left,int right,int preIndex){
        if(left>right) return null;
        else if (left == right) {
            return new TreeNode(vinOrder[left]);
        }else{
            int item=preOrder[preIndex];
            int mid=0;
            for(int i=left;i<=right;i++){
                if(vinOrder[i]==item){
                    mid=i;
                }
            }
            //1 2 3 4 5
            //4 2 5 1 3
            TreeNode treeNode=new TreeNode(item);
            treeNode.left=createTree(preOrder,vinOrder,left,mid-1,preIndex+1);
            treeNode.right=createTree(preOrder,vinOrder,mid+1,right,preIndex+(mid-left+1));
            return treeNode;
        }
    }
}

3.在二叉树中找到两个节点的最近公共祖先

import java.util.*;

/*
 * public class TreeNode {
 *   int val = 0;
 *   TreeNode left = null;
 *   TreeNode right = null;
 *   public TreeNode(int val) {
 *     this.val = val;
 *   }
 * }
 */

public class Solution {
    /**
     * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
     *
     *
     * @param root TreeNode类
     * @param o1 int整型
     * @param o2 int整型
     * @return int整型
     */
    public int lowestCommonAncestor (TreeNode root, int o1, int o2) {
        // write code here
        if (root == null) {
            return 0;
        }
        if (root.val == o1) return root.val;
        if (root.val == o2) return root.val;
        int left = lowestCommonAncestor(root.left, o1, o2);
        int right = lowestCommonAncestor(root.right, o1, o2);
        if (left != 0 && right != 0) return root.val;
        if (left != 0 && right == 0) return left;
        if (left == 0 && right != 0) return right;
        return 0;
    }
}

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

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

相关文章

【无线通信发展史⑤】万有引力定律的推导前奏3.0,本次学习开普勒三大定律,成就“天空立法者”的美名

前言&#xff1a;用这几个问答形式来解读下我这个系列的来龙去脉。如果大家觉得本篇文章不水的话希望帮忙点赞收藏加关注&#xff0c;你们的鼓舞是我继续更新的动力。 我为什么会写这个系列呢&#xff1f; 首先肯定是因为我本身就是一名从业通信者&#xff0c;想着更加了解自…

高性能 Web 服务器:让网页瞬间绽放的魔法引擎(中)

目录 一.Nginx版本和安装方式:源码编译安装 1.验证版本及编译参数 2.使用安装完成的二进制文件nginx 3.Nginx 启动文件 二.平滑升级和回滚 三.全局配置 实现 nginx 的高并发配置 四.核心配置&#xff1a;新建一个 PC web 站点 五.核心配置&#xff1a;location的详细使用…

vscode 远程控制ssh操作步骤

1.下载拓展Remote - SSH 打开Visual Studio Code&#xff0c;进入拓展市场(CtrlShiftX)&#xff0c;下载拓展Remote - SSH 2.选择远程(隧道/SSH)类别 点击远程资源管理器选项卡&#xff0c;并选择远程(隧道/SSH)类别 4.在弹出的选择配置文件中&#xff0c;点击第一个 5. 连接到…

基于PHP网上投票系统---附源码121500

摘 要 随着全球Internet的迅猛发展和计算机应用的普及&#xff0c;特别是近几年无线网络的广阔覆盖以及无线终端设备的爆炸式增长&#xff0c;使得人们能够随时随地的访问网络&#xff0c;以获取最新信息、参与网络活动、和他人在线互动。为了能及时地了解民情民意&#xff0c;…

深度学习基础—学习率衰减与局部最优问题

1.学习率衰减 下图中&#xff0c;蓝色的线是min-batch梯度下降法过程中较大学习率的的优化路径&#xff0c;绿线是较小学习率的优化路径。 如果使用min-batch梯度下降法&#xff0c;在模型的学习过程中&#xff0c;会有很多噪声&#xff0c;在靠近最小值的时候&#xff0c;由于…

考试:数据库系统(02)

关系代数 ◆并&#xff1a;结果是两张表中所有记录数合并&#xff0c;相同记录只显示一次。 ◆交&#xff1a;结果是两张表中相同的记录。 ◆差&#xff1a;S1-S2, 结果是S1表中有而S2表中没有的那些记录。 ◆笛卡尔积&#xff1a;S1*S2,产生的结果包括S1和S2的所有属性列&…

Redis7基础篇(二)

目录 持化双雄 RDB 案例演示 优势 劣势 AOF 案例演示 正常恢复 异常恢复 优点 缺点​编辑 aof重写机制 ​编辑​编辑重写的原理​编辑 小总结 rdb和aof的混合持久化 纯缓存模式 redis的持久化最终还是靠硬盘 持化双雄 redis提供了一rdb aof 不持久化 rdbaof的…

ansible相关模块

copy模块(重点) copy模块⽤于对⽂件的远程拷⻉操作&#xff08;如把本地的⽂件拷⻉到远程 的机器上) https://docs.ansible.com/ansible/latest/modules/copy_module.htm l#copy-module 在master上准备⼀个⽂件&#xff0c;拷⻉此⽂件到group1的所有机器上 使⽤content参数直…

Linux之 宝塔面板 通过binlog日志恢复被删除表的数据

参考文章 查找mysql的binlog文件位置 这个命令是用来将MySQL的二进制日志文件(mysql-bin.000021)转换成SQL格式的文件(000021.sql)。 /www/server/mysql/bin/mysqlbinlog --base64-outputDECODE-ROWS -v mysql-bin.000021 > /www/000021.sql 提取sql语句 [rootdata]# …

访问网站出现“此站点不安全”如何解决

在网络浏览中&#xff0c;我们经常会遇到浏览器地址栏出现“此站点不安全”的警告。这通常意味着网站没有使用SSL&#xff08;安全套接层&#xff09;加密来保护用户数据的安全。那么&#xff0c;如何通过获得并安装SSL证书来消除这一警告&#xff0c;确保网站的安全可靠呢&…

未来视界,触手可及:揭秘数字透明屏的奇幻之旅

在这个日新月异的科技时代&#xff0c;每一项创新都如同星辰般璀璨&#xff0c;引领着我们向更加智能、更加梦幻的未来迈进。今天&#xff0c;就让我们一起揭开一项颠覆传统视觉体验的前沿科技——数字透明屏的神秘面纱&#xff0c;探索它如何将未来视界&#xff0c;化为触手可…

C++集成spdlog,spdlog基本使用方法

C集成spdlog&#xff0c;spdlog基本使用方法 何时输出日志第一步&#xff1a;集成 spdlog 到你的项目方法 1&#xff1a;使用包管理器&#xff08;例如 vcpkg 或 conan&#xff09;方法 2&#xff1a;手动集成 第二步&#xff1a;基本使用第三步&#xff1a;设置日志级别第四步…

后端开发刷题 | 反转链表【链表篇】

描述 给定一个单链表的头结点pHead(该头节点是有值的&#xff0c;比如在下图&#xff0c;它的val是1)&#xff0c;长度为n&#xff0c;反转该链表后&#xff0c;返回新链表的表头。 数据范围&#xff1a; 0≤n≤1000 要求&#xff1a;空间复杂度 O(1) &#xff0c;时间复杂度…

xss 漏洞复现

xss 漏洞复现 一&#xff0c;xss game 1&#xff0c;源码 <!-- Challenge --> <h2 id"spaghet"></h2> <script>spaghet.innerHTML (new URL(location).searchParams.get(somebody) || "Somebody") " Toucha Ma Spaghet!…

Centos7离线安装Sumo全过程(xerces-c、Cmake、gymnasium等)

在 Linux 环境下使用 Python 调用 SUMO 进行相关训练时&#xff0c;通常需要先安装 SUMO。然而&#xff0c;在某些情况下&#xff0c;网络连接可能不可用&#xff0c;因此本文提供了 SUMO 的离线安装方法。 Step1&#xff1a;检查基础依赖包是否完整 基本的依赖项如果有别的缺…

机械学习—零基础学习日志(如何理解概率论2)

全概率公式与贝叶斯公式 上面所提到的公式&#xff0c;可以使用上一篇文章的基本公式推导。 使用到了概率的基本运算公式。 完整的公式展示&#xff1a; 习题练习&#xff1a; 剩余的练习&#xff1a; 第二题解析&#xff1a; 第三题&#xff1a; 第四题&#xff1a; 注意&…

酒店管理系统设计与实现(源码+lw+部署文档+讲解等)

文章目录 前言具体实现截图详细视频演示技术栈系统测试为什么选择我官方认证玩家&#xff0c;服务很多代码文档&#xff0c;百分百好评&#xff0c;战绩可查&#xff01;&#xff01;入职于互联网大厂&#xff0c;可以交流&#xff0c;共同进步。有保障的售后 代码参考数据库参…

Navicat Premium Lite: 简化版的数据库管理和开发工具

Navicat Premium 一直是世界各地数据库专业人士需要从一个应用程序同时连接到多种数据库平台的选择。现在&#xff0c;Navicat Premium Lite 为只需要基本数据库操作所需的核心功能的用户提供简化版的数据库管理体验。在今天的博客中&#xff0c;我们将介绍 Navicat Premium Li…

【案例46】Oracle更换数据库密码后产生Library Cache Lock导致系统卡死

问题现象 WAS环境&#xff0c;服务起不来&#xff0c;改成单机版后能登录&#xff0c;打不开节点。直接卡死。 问题分析 经过顾问反馈&#xff0c;在启动环境时&#xff0c;中间件卡住不动&#xff0c;怀疑数据源不通导致&#xff0c;于是使用checkDB脚本发现desgin数据源用…

leaflet如何为geoJson图层设置zIndex图层顺序?

这个问题也是纠结了半天&#xff0c;两个geojson的面图层作为Layer&#xff0c;因所画的内容重要程度不同&#xff0c;总有主次之分&#xff0c;比如标记型的图标&#xff0c;即使被盖住了&#xff0c;也无伤大雅&#xff0c;但是一些监控或者告警的数据&#xff0c;如果被盖住…