Leetcode--1028. 从先序遍历还原二叉树(Java)

我们从二叉树的根节点 root 开始进行深度优先搜索。

在遍历中的每个节点处,我们输出 D 条短划线(其中 D 是该节点的深度),然后输出该节点的值。(如果节点的深度为 D,则其直接子节点的深度为 D + 1。根节点的深度为 0)。

如果节点只有一个子节点,那么保证该子节点为左子节点。

给出遍历输出 S,还原树并返回其根节点 root。

 

示例 1:

输入:"1-2--3--4-5--6--7"
输出:[1,2,5,3,4,6,7]


示例 2:

输入:"1-2--3---4-5--6---7"
输出:[1,2,5,3,null,6,null,4,null,7]


示例 3:

输入:"1-401--349---90--88"
输出:[1,401,null,349,88,90]

提示:

原始树中的节点数介于 1 和 1000 之间。
每个节点的值介于 1 和 10 ^ 9 之间。

思路:

利用栈

两个相邻的结点只可能存在两种关系

1.后者是前者的左子节点

2.后者与前者无关,是更前面某一个节点的右子节点

/**

 * Definition for a binary tree node.

 * public class TreeNode {

 *     int val;

 *     TreeNode left;

 *     TreeNode right;

 *     TreeNode(int x) { val = x; }

 * }

 */

class Solution {

    public TreeNode recoverFromPreorder(String S) {

        if(S==null||S.length()==0){

            return null;

        }

        Stack<TreeNode> stack = new Stack<>();

        TreeNode root = new TreeNode(S.charAt(0)-'0');

        int index=0;

        while(index<S.length()){

            int level = 0;

          //记录当前找个节点处于第几层(通过看他前面有几条短线)

            while(S.charAt(index)=='-'){

                index++;

                level++;

            }

            int value = 0;

            while (index < S.length() && Character.isDigit(S.charAt(index))) {

                value = value * 10 + (S.charAt(index) - '0');

                ++index;

            }

            TreeNode temp = new TreeNode(value);

            //如果栈中节点遍历到的层数和新节点处于的层数一样,那么新节点是之前节点的左子节点,压入栈中

            if(level==stack.size()){

                if(!stack.isEmpty()){

                    stack.peek().left = temp;

                }

           //依次遍历到新节点父亲的层数,其他的出栈

            }else{

                while(level!=stack.size()){

                    stack.pop();

                }

                stack.peek().right=temp;

            }

            stack.push(temp);

        }

     //有的结点可能未出栈,依次退栈,只留下树根返回

        while(stack.size()>1){

            stack.pop();

        }

        return stack.peek();

    }

}

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

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

相关文章

赛迪展望 | 一文了解“2021年中国先进计算产业发展趋势”

来源&#xff1a;中国电子信息产业发展研究院内容提要人类社会的组织、生产和生活方式正伴随着计算技术创新、融合、扩散、升级&#xff0c;呈现深刻的变革趋势。计算对经济社会发展和产业能级跃升的驱动作用日益凸显。展望2021年&#xff0c;先进、新型的计算基础架构&#xf…

物理如何证明上帝的存在?

来源&#xff1a;利维坦文&#xff1a;Monica Grady译&#xff1a;苦山校对&#xff1a;兔子的凌波微步原文&#xff1a;www.bbc.com/future/article/20210301-how-physics-could-prove-god-exists“我曾在一次研讨会上听到下面这个问题——当时我还相信上帝&#xff08;现在我…

XSS攻击的防御

XSS攻击的防御 XSS 攻击是什么 XSS 又称 CSS&#xff0c;全称 Cross SiteScript&#xff0c;跨站脚本攻击&#xff0c;是 Web 程序中常见的漏洞&#xff0c;XSS 属于被动式且用于客户端的攻击方式&#xff0c;所以容易被忽略其危害性。其原理是攻击者向有 XSS 漏洞的网站中输入…

【前沿技术】2021年AI将改变制造业的6大应用趋势

来源&#xff1a;智能研究院 如今制造行业流行的是什么?我想&#xff0c;这可少不了“数字转换”、“工业4.0”、“人工智能(AI)”...下面&#xff0c;就让我们一起看看AI如何改变制造业。▍一、用于缺陷检测的深度学习在制造中&#xff0c;生产线中的缺陷检测过程变得越来越…

MarkDown/Html在线转换(支持代码高亮,可复制到微信公众号、今日头条)

MarkDown/Html在线转换能够将md渲染成html并且能保持代码高亮&#xff0c;可以方便的复制待格式的html粘贴到微信公众号&#xff0c;CSDN&#xff0c;简书&#xff0c;博客园&#xff0c;开源中国等。 扫码体验在线助手小程序 我是java代码public static void main(String[] ar…

脑机接口简史——假如这篇推送是你靠意念打开的

来源&#xff1a;脑极体未来智能实验室的主要工作包括&#xff1a;建立AI智能系统智商评测体系&#xff0c;开展世界人工智能智商评测&#xff1b;开展互联网&#xff08;城市&#xff09;云脑研究计划&#xff0c;构建互联网&#xff08;城市&#xff09;云脑技术和企业图谱&a…

一文读懂深度学习中的各种卷积

来源&#xff1a;海豚数据科学实验室编辑&#xff1a;王萌(深度学习冲鸭公众号)我们都知道卷积的重要性&#xff0c;但你知道深度学习领域的卷积究竟是什么&#xff0c;又有多少种类吗&#xff1f;研究学者 Kunlun Bai 发布了一篇介绍深度学习的卷积文章&#xff0c;用浅显易懂…

为什么信不过AI看病?数据集小、可靠性差,AI医疗任重道远

来源&#xff1a;机器之心近年来&#xff0c;AI 在医疗诊断中的应用受到了越来越多的关注&#xff0c;也出现了一些实际的应用场景&#xff0c;如药物筛选、AI 诊断。但似乎正确的 AI 医疗诊断难以实现&#xff0c;这是哪些原因造成的呢&#xff1f;本文探讨并汇总了人们对 AI …

人工智能学派之间的「联姻」——Yoshua 新作居然用DL「复活」了符号主义

来源&#xff1a;混沌巡洋舰 近日&#xff0c;Yoshua Bengio及其团队利用深度学习&#xff0c;开发出了一套可以揭示丰富视觉环境中的潜在规则的「神经生产系统」&#xff0c;使得现在暂时沉寂的符号人工智能重新恢复了活力。相信大家都知道&#xff0c;目前人工智能的主要学派…

25万亿规模!中国智慧城市建设刚需在哪?

来源&#xff1a;帮尼资讯如果说当下在中国新基建中最火的名词是什么&#xff0c;智慧城市这四个字几乎脱口而出。而在雪亮工程已经基本结束的当下&#xff0c;智慧城市接过了雪亮工程的大旗&#xff0c;成为了对安防企业来说利润最大、保障最稳的政府类项目。前瞻产业研究院预…

浅析Serverless

近两年来&#xff0c;Serverless 概念在开发者中交流的越来越多&#xff0c;主题分享呈现爆发趋势。有人说&#xff1a;Serverless 正在改变未来软件开发的模式和流程&#xff0c;它就是云计算的未来。 在一个应用中包含了多个功能&#xff0c;如订单创建、订单查询和订单修改…

复兴or幻象?VR的2021三重门

来源&#xff1a;脑极体从2020年底开始&#xff0c;无论你日常看一些数码博主的评测&#xff0c;还是喜欢了解科技产业的动态、投融资的报道&#xff0c;都能在媒体中了解到这么一个信号&#xff1a;2021&#xff0c;VR复兴了&#xff01;当然&#xff0c;这个表述有很多说法&a…

24张GIF图,让你秒懂非标自动化机构的原理

来源&#xff1a;工业机器人1.组合加紧机构↓↓2.凸轮连杆组合输送薄板机构↓↓3.热合联动↓↓4.凸轮双摇杆机构单独运动↓↓5.步进输送机构↓↓6.输出构件作间歇运动↓↓7.输出构件作间歇运动等宽凸轮间歇移动机构↓↓8.双摇杆夹紧机构↓↓9.不自锁推拉式夹紧机构↓↓10.双肘杆…

机器学习的通俗讲解

来源&#xff1a;dataxon译者&#xff1a;Ahong机器学习人人都在谈论&#xff0c;但除了老师们知根知底外&#xff0c;只有很少的人能说清楚怎么回事。如果阅读网上关于机器学习的文章&#xff0c;你很可能会遇到两种情况&#xff1a;充斥各种定理的厚重学术三部曲(我搞定半个定…

边缘计算有哪些关键技术?

来源&#xff1a;智东西、金融界等网站原文链接&#xff1a;https://mp.weixin.qq.com/s/5QAHPMM8SNE3J8fpmDKFaQ如果要问物联网圈最火的概念有哪些&#xff1f;5G与边缘计算一定榜上有名&#xff0c;两者看似风马牛不相及&#xff0c;实则却在冥冥之中自有交集。5G时代&#x…

论文《城市大脑的定义与建设规范探讨》在IEEE(ICBAIE)发表

来源&#xff1a;城市大脑全球标准研究组城市大脑全球标准研究组论文《Discussion on the Definition and Construction Principles of City Brain》&#xff0c;2021年3月在2021 IEEE 2nd International Conference on Big Data, Artificial Intelligence and Internet of Thi…

修改类名后依旧按照原先的类名进行加载

在springMvcMybatis的项目里面 修改了一个类名&#xff0c;之后编译的时候报出了以下的错误 试过 clean也没有作用 黑色涂鸦部分为原先的类名 删掉target文件夹解决了问题 原因是target会保存之前编译好的路径&#xff0c;编译时如果再根据之前的路径去寻找&#xff0c;一定…

谷歌的深度学习在AI芯片中找到了一条关键路径

来源&#xff1a;AI前线 作者&#xff1a;Tiernan Ray译者&#xff1a;Sambodhi策划&#xff1a; 刘燕一年前&#xff0c;ZDNet 与谷歌大脑总监 Jeff Dean谈到 了该公司如何使用人工智能来推进定制芯片的内部开发&#xff0c;从而加快软件开发。Dean 指出&#xff0c;在有些情…

脑机接口猴子通过“意念”打游戏!马斯克:未来能让瘫痪者用意念玩手机

来源&#xff1a;新智元它是Pager&#xff0c;一只9岁的恒河猴&#xff0c;来自Neuralink&#xff0c;最近它刚刚get了新技能——用意念玩乒乓球游戏。6个星期前&#xff0c;Pager的脑袋里被植入了两个叫N1 Link的装置&#xff0c;工作人员用香蕉奶昔诱惑它玩游戏&#xff0c;屏…

struts2_HelloWorld

第一个Struts2程序-Hello 1.创建web工程struts2-01-Hello 2.导入jar包到bin目录,jar地址: https://files.cnblogs.com/files/aihuadung/struts%E6%89%80%E9%9C%80jar%E5%8C%85.zip 3.配置web.xml文件 <?xml version"1.0" encoding"UTF-8"?><!DO…