zoukankan      html  css  js  c++  java
  • 【LeetCode每日一题】2020.6.18 1028. 从先序遍历还原二叉树

    1028. 从先序遍历还原二叉树

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

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

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

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

    示例:

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

    分析:

    ​ 感觉自己讲得不好,贴出官方题解。我觉得关键在于理解递归栈的大小和结点深度的关系。

    代码(Python):

    class Solution:
        def recoverFromPreorder(self, S: str) -> TreeNode:
            path = []  # 存储结点
            pos = 0  # 存储遍历位置
            while pos < len(S):
                level = 0  # 存储结点深度
                while S[pos] == '-':
                    # 增加结点深度
                    level += 1
                    pos += 1
                value = 0  # 存储结点值
                while pos < len(S) and S[pos].isdigit():
                    value = value * 10 + (ord(S[pos]) - ord('0'))
                    pos += 1
                node = TreeNode(value)
                # 如果当前结点深度正好等于目前存储得结点个数,说明该节点就是根结点的左子结点
                if level == len(path):
                    if path:
                        path[-1].left = node
                # 说明该节点位于根结点左侧,且是左侧的最后一个结点,即左侧某个结点的右结点
                else:
                    path = path[:level]
                    path[-1].right = node
                path.append(node)
            return path[0]
    
  • 相关阅读:
    【WCF--初入江湖】04 WCF通信模式
    【WCF--初入江湖】03 配置服务
    c++输出左右对齐设置
    setw()函数
    clion更改大括号的位置
    emacs org-mode 中文手册精简版(纯小白)
    c++ string 类型 大小写转换 
    C++中string类型的find 函数
    string类型 C++
    统计单词数---单词与空格
  • 原文地址:https://www.cnblogs.com/enmac/p/13156477.html
Copyright © 2011-2022 走看看