zoukankan      html  css  js  c++  java
  • [LeetCode] 1028. 从先序遍历还原二叉树

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

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

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

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

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

    示例 1:

    img1

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

    示例 2:

    img2

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

    示例 3:

    img3

    输入:"1-401--349---90--88"
    输出:[1,401,null,349,88,90]
    ``` 
    
    **提示:**
    
    - 原始树中的节点数介于 1 和 1000 之间。
    - 每个节点的值介于 1 和 10 ^ 9 之间。
    
    
    来源:力扣(LeetCode)
    
    链接:https://leetcode-cn.com/problems/recover-a-tree-from-preorder-traversal
    
    著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
    
    ```golang
    /**
     * Definition for a binary tree node.
     * type TreeNode struct {
     *     Val int
     *     Left *TreeNode
     *     Right *TreeNode
     * }
     */
    func recoverFromPreorder(S string) *TreeNode {
        path, pos := []*TreeNode{}, 0
        for pos < len(S) {
            level := 0
            for S[pos] == '-' {
                level++
                pos++
            }
            value := 0
            for ; pos < len(S) && S[pos] >= '0' && S[pos] <= '9'; pos++ {
                value = value * 10 + int(S[pos] - '0')
            }
            node := &TreeNode{Val: value}
            if level == len(path) {
                if len(path) > 0 { path[len(path)-1].Left = node }
            } else {
                path = path[:level]
                path[len(path)-1].Right = node
            }
            path = append(path, node)
        }
        return path[0]
    }
    
  • 相关阅读:
    程序员需要的各种PDF格式电子书【附网盘免费下载资源地址】
    Web安全大揭秘
    tar 压缩解压命令详解
    django开发项目的部署nginx
    CentOS7安装mysql-python模块
    我的博客站点上线了
    2006
    centos7安装pip
    mysql删除匿名用户
    FilenameFilter 文件名过滤
  • 原文地址:https://www.cnblogs.com/wangyiyang/p/13156290.html
Copyright © 2011-2022 走看看