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]
    }
    
  • 相关阅读:
    poj 1035 (Spell checker )
    poj 3080 (暴力 strstr)
    kmp 模版
    匈牙利算法模版
    poj 1274 The Perfect Stall (最大匹配)
    hdu 1083 Courses(二分图 )
    pku 3363(内部测试赛)
    Linux 下联网脚本文件
    Qt 多国语言
    引用和引用参数
  • 原文地址:https://www.cnblogs.com/wangyiyang/p/13156290.html
Copyright © 2011-2022 走看看