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,一经查实,立即删除!

相关文章

html-列表

<!DOCTYPE html><html lang"en"><head> <meta charset"UTF-8"> <title>Document</title></head><body><h3>你喜欢的水果&#xff1a;</h3><ul> <!-- 无序列表 --> <li>苹果…

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

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

124. 二叉树中的最大路径和(Java)

给定一个非空二叉树&#xff0c;返回其最大路径和。 本题中&#xff0c;路径被定义为一条从树中任意节点出发&#xff0c;达到任意节点的序列。该路径至少包含一个节点&#xff0c;且不一定经过根节点。 示例 1: 输入: [1,2,3] 1 / \ 2 3 输出: 6 示例 2: 输…

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

来源&#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 漏洞的网站中输入…

HashSet源码解析(最好先看HashMap的源码解析)

HashMap的源码解析&#xff1a;https://mp.csdn.net/console/editor/html/106188425 HashSet&#xff1a;Java中的一个集合类&#xff0c;该容器不允许包含重复的数值 public class HashSet<E>extends AbstractSet<E>implements Set<E>, Cloneable, java.i…

【前沿技术】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…

idea控制台乱码问题

出现 淇℃伅 乱码 进入Tomcat下的 logging.properties 讲UTF-8改为GBK java.util.logging.ConsoleHandler.encoding UTF-8 java.util.logging.ConsoleHandler.encoding GBK

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

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

10-18考试记

10-18考试记 300分。开心。 1、咒语 【题目描述】 亮亮梦到自己来到了魔法城堡&#xff0c;但一扇巨大的石门阻拦了他通向城堡内的路。 正当他沮丧之际&#xff0c;突然发现门上有一处机关&#xff0c;机关上有一张很长的纸条。 亮亮拿起纸条的一端&#xff0c;只见上面写着打开…

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

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

Leetcode--96. 不同的二叉搜索树(java)

给定一个整数 n&#xff0c;求以 1 ... n 为节点组成的二叉搜索树有多少种&#xff1f; 示例: 输入: 3 输出: 5 解释: 给定 n 3, 一共有 5 种不同结构的二叉搜索树: 1 3 3 2 1 \ / / / \ \ 3 2 1 1…

简介

现在市场上存在很多厂商推出的数据库管理系统&#xff0c;商业化的有Oracle、MSSQLServer、DB2、SybaseSQLServer、Informix&#xff0c;开源的有MYSQL、SQLite、SimpleSQL、Berkely DB、Minosse、Firebird、HSQLDB等&#xff0c;这些数据库产品的出现给了开发者更多的选择余地…

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

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

URI与URL

统一资源标志符URI就是在某一规则下能把一个资源独一无二地标识出来。 拿人做例子&#xff0c;假设这个世界上所有人的名字都不能重复&#xff0c;那么名字就是URI的一个实例&#xff0c;通过名字这个字符串就可以标识出唯一的一个人。 现实当中名字当然是会重复的&#xff0c;…

p1470 Longest Prefix

原本就想到dp&#xff0c;可是是我的思路是在串的各个位置都遍历一次set&#xff0c;看dp[i-st[k]]是否为1且前length(st[k])是st[k]。这样200000*200*10会超时。更好的办法是在i位取前len<10个看dp[]和set中是否存在。只要200000*55*log200。 #include <iostream> #i…

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

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

域名,ip,mac地址

域名&#xff1a;由一串用点分隔的名字组成的Internet上某一台计算机或计算机组的名称&#xff0c;用于在数据传输时对计算机的定位标识&#xff08;有时也指地理位置&#xff09;。 mac地址&#xff1a;物理地址、硬件地址&#xff0c;用来定义网络设备的位置。 IP地址&…

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

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