zoukankan      html  css  js  c++  java
  • Convert Sorted Array to Binary Search Tree

    Given an array where elements are sorted in ascending order, convert it to a height balanced BST.

    cpp:

    class Solution {
    public:
        TreeNode* sortedArrayToBST(vector<int>& nums) {
            if (nums.empty())
                return nullptr;
            int l = 0;
            int r = nums.size() - 1;
            if (l == r)
                return new TreeNode(nums[l]);
            int m = (r >> 1);
            TreeNode *root = new TreeNode(nums[m]);
    
            helper(l, m - 1, root, nums, 0);
            helper(m + 1, r, root, nums, 1);
            return root;
        }
    
        void helper(int l, int r, TreeNode* root, vector<int>& nums,
                int LeftorRight) {
            if (l > r)
                return;
            if (l == r) {
                if (LeftorRight == 0) {
                    root->left = new TreeNode(nums[l]);
                } else {
                    root->right = new TreeNode(nums[l]);
                }
                return;
            }
            TreeNode *curNode;
            int m = l + ((r - l) >> 1);
            if (LeftorRight == 0) {
                root->left = new TreeNode(nums[m]);
                curNode = root->left;
            } else {
                root->right = new TreeNode(nums[m]);
                curNode = root->right;
            }
            helper(l, m - 1, curNode, nums, 0);
            helper(m + 1, r, curNode, nums, 1);
        }
    };

    java:

    public class Solution {
        public TreeNode sortedArrayToBST(int[] nums) {
            int len = nums.length;
            if (len == 0)
                return null;
    
            int l = 0;
            int r = len - 1;
            int m = l + ((r - l) >> 1);
    
            if (l == r)
                return new TreeNode(nums[l]);
    
            TreeNode root = new TreeNode(nums[m]);
    
            helper(l, m - 1, root, nums, 0);
            helper(m + 1, r, root, nums, 1);
    
            return root;
    
        }
    
        public void helper(int l, int r, TreeNode root, int[] nums, int LeftorRight) {
            if (l > r)
                return;
            if (l == r) {
                if (LeftorRight == 0)
                    root.left = new TreeNode(nums[l]);
                else
                    root.right = new TreeNode(nums[l]);
                return;
            }
            int m = l + ((r - l) >> 1);
            TreeNode curNode = new TreeNode(nums[m]);
            if (LeftorRight == 0)
                root.left = curNode;
            else
                root.right = curNode;
    
            helper(l, m - 1, curNode, nums, 0);
            helper(m + 1, r, curNode, nums, 1);
    
        }
    }
  • 相关阅读:
    005.Kickstart部署多系统
    004.Kickstart部署之FTP架构
    003.Kickstart部署之HTTP架构
    C#并发编程之异步编程(二)
    设计模式之策略者模式
    设计模式之职责链模式
    C#并发编程之异步编程(一)
    C#并发编程之概述
    微服务探索与实践—总述
    设计模式之模板方法模式
  • 原文地址:https://www.cnblogs.com/wxquare/p/5211524.html
Copyright © 2011-2022 走看看