zoukankan      html  css  js  c++  java
  • 536. Construct Binary Tree from String

    package LeetCode_536
    
    import java.util.*
    
    /**
     * 536. Construct Binary Tree from String
     * (Prime)
     * You need to construct a binary tree from a string consisting of parenthesis and integers.
    The whole input represents a binary tree.
    It contains an integer followed by zero, one or two pairs of parenthesis.
    The integer represents the root's value and a pair of parenthesis contains a child binary tree with the same structure.
    You always start to construct the left child node of the parent first if it exists.
    Example:
    Input: "4(2(3)(1))(6(5))"
    Output: return the tree root node representing the following tree:
         4
       /  
      2    6
     /   /
    3  1 5
    Note:
    There will only be '(', ')', '-' and '0' ~ '9' in the input string.
    An empty tree is represented by "" instead of "()".
     * */
    class TreeNode(var value: Int){
        var left: TreeNode? = null
        var right: TreeNode? = null
    }
    class Solution {
        /*
        * solution: Stack with pre-order (root->left->right) traversal,the top of stack should be current root
        * Time complexity:O(n), Space complexity:O(n)
        * */
        fun str2Tree(s: String): TreeNode?{
            if (s==null || s.isEmpty()){
                return null
            }
            val stack = Stack<TreeNode>()
            for (i in s.indices){
                val c = s[i]
                if (c in '0'..'9' || c=='-'){
                    var start = i
                    //keep to find out the whole digit number
                    while (i+1<s.length && (s[i+1] in '0'..'9')){
                        start++
                    }
                    //create current node by get the number above
                    val curValue = s.substring(start,i+1).toInt()
                    val curNode = TreeNode(curValue)
                    if (stack.isNotEmpty()){
                        //curNode is the child node of top node
                        val top = stack.peek()
                        if (top.left == null){
                            top.left = curNode
                        } else {
                            top.right = curNode
                        }
                    }
                    stack.push(curNode)
                } else if (c==')') {
                    //mean current side had handle finish
                    stack.pop()
                }
            }
            //print the result
            traversal(stack.peek())
            return stack.peek()
        }
    
        //print by pre-order
        private fun traversal(root: TreeNode?) {
            if (root == null) return
            print(root.value)
            print(",")
            traversal(root.left)
            traversal(root.right)
        }
    }
  • 相关阅读:
    海云健康:上云为10万家药店带去了什么价值?
    PostgreSQL数据目录深度揭秘
    当设计模式遇上 Hooks
    SpringBoot 优雅停止服务的几种方法
    【2021-08-19】连岳摘抄
    【2021-08-18】该休息,还是要好好休息
    【2021-08-17】心里没底,就给它得找个底
    NFLSOJ 1072
    Solution -「ARC 125F」Tree Degree Subset Sum
    Solution -「ARC 125E」Snack
  • 原文地址:https://www.cnblogs.com/johnnyzhao/p/13818167.html
Copyright © 2011-2022 走看看