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)
        }
    }
  • 相关阅读:
    思科交换机端口安全配置
    华为交换机端口安全配置
    多行文本出现省略号必备的条件(面试题)
    单行文本出现省略号必备的条件(面试题)
    让多个元素在一行显示的方法和技巧(面试题)
    overflow的多个作用
    雪碧图的使用和制作技巧
    列举background属性的8个属性值(面试题)
    background-origin设置背景图像的参考原点(位置)
    background-clip设置对象的背景图像向外裁剪的区域
  • 原文地址:https://www.cnblogs.com/johnnyzhao/p/13818167.html
Copyright © 2011-2022 走看看