zoukankan      html  css  js  c++  java
  • 1008. Construct Binary Search Tree from Preorder Traversal

    package LeetCode_1008
    
    /**
     * 1008. Construct Binary Search Tree from Preorder Traversal
     * https://leetcode.com/problems/construct-binary-search-tree-from-preorder-traversal/description/
     *
     * Return the root node of a binary search tree that matches the given preorder traversal.
    (Recall that a binary search tree is a binary tree where for every node, any descendant of node.
    left has a value < node.val, and any descendant of node. right has a value > node.val.
    Also recall that a preorder traversal displays the value of the node first, then traverses node.left, then traverses node.right.)
    It's guaranteed that for the given test cases there is always possible to find a binary search tree with the given requirements.
    
    Example 1:
    Input: [8,5,1,7,10,12]
    Output: [8,5,10,1,7,null,12]
    
    Constraints:
    =. 1 <= preorder.length <= 100
    =. 1 <= preorder[i] <= 10^8
    =. The values of preorder are distinct.
     * */
    
    class TreeNode(var `val`: Int) {
        var left: TreeNode? = null
        var right: TreeNode? = null
    }
    
    class Solution {
        /*
          Time complexity: O(nlogn), Space complexity: O(n)
        * preorder:root->left->right,so the first element of preorder array is the root of tree
        * */
        fun bstFromPreorder(preorder: IntArray): TreeNode? {
            if (preorder == null || preorder.isEmpty()) {
                return null
            }
            val size = preorder.size
            val root = TreeNode(preorder[0])
            for (i in 1 until size) {
                help(root, preorder[i])
            }
            return root
        }
    
        private fun help(root: TreeNode?, value: Int): TreeNode? {
            if (root == null) {
                return TreeNode(value)
            }
            if (root.`val` < value) {
                root.right = help(root.right, value)
            } else {
                root.left = help(root.left, value)
            }
            return root
        }
    }
  • 相关阅读:
    进程间通信的方式——信号、管道、消息队列、共享内存
    exit()与_exit()的区别(转)
    [Google Codejam] Round 1A 2016
    使用shell脚本自定义实现选择登录ssh
    PHP的反射机制【转载】
    PHP set_error_handler()函数的使用【转载】
    PHP错误异常处理详解【转载】
    php的memcache和memcached扩展区别【转载】
    .htaccess重写URL讲解
    PHP数据库扩展mysqli的函数试题
  • 原文地址:https://www.cnblogs.com/johnnyzhao/p/13258436.html
Copyright © 2011-2022 走看看