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);
    
        }
    }
  • 相关阅读:
    kvm
    Javascript 笔记与总结(2-7)对象
    [Swift]LeetCode172. 阶乘后的零 | Factorial Trailing Zeroes
    Swift5.3 语言指南(五) 基本运算符
    C#6.0语言规范(一) 介绍
    [Swift]LeetCode171. Excel表列序号 | Excel Sheet Column Number
    [Swift]LeetCode169. 求众数 | Majority Element
    [Swift]LeetCode168. Excel表列名称 | Excel Sheet Column Title
    [Swift]LeetCode167. 两数之和 II
    [Java]LeetCode141. 环形链表 | Linked List Cycle
  • 原文地址:https://www.cnblogs.com/wxquare/p/5211524.html
Copyright © 2011-2022 走看看