• [Leetcode] Convert Sorted Array to Binary Search Tree


    Convert Sorted Array to Binary Search Tree 题解

    题目来源:https://leetcode.com/problems/convert-sorted-array-to-binary-search-tree/description/


    Description

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

    For this problem, a height-balanced binary tree is defined as a binary tree in which the depth of the two subtrees of every node never differ by more than 1.

    Example

    
    Given the sorted array: [-10,-3,0,5,9],
    
    One possible answer is: [0,-3,9,-10,null,5], which represents the following height balanced BST:
    
          0
         / 
       -3   9
       /   /
     -10  5
    
    

    Solution

    class Solution {
    private:
        struct Task {
            TreeNode **nodep;
            int start, end;
            Task(TreeNode **p, int s, int e) :
                    nodep(p), start(s), end(e) {}
        };
    public:
        TreeNode* sortedArrayToBST(vector<int>& nums) {
            if (nums.empty())
                return NULL;
            TreeNode *root, *node;
            int start, end, mid;
            queue<Task> q;
            q.push(Task(&root, 0, nums.size() - 1));
            while (!q.empty()) {
                Task task = q.front();
                q.pop();
                start = task.start;
                end = task.end;
                if (start > end)
                    continue;
                mid = (start + end) / 2;
                node = new TreeNode(nums[mid]);
                *(task.nodep) = node;
                if (start == end)
                    continue;
                q.push(Task(&(node -> left), start, mid - 1));
                q.push(Task(&(node -> right), mid + 1, end));
            }
            return root;
        }
    };
    
    

    解题描述

    这道题题意是,将一个有序数组转换成一个BST(二分查找树),并且要求输出的BST是一棵平衡树(每个节点的左右子树高度差小于1)。解法上我用的是迭代,每次都将数组的最中间数据作为当前子树的根节点,左边的数据作为左子树,右边的数据作为右子树,将左右范围加入任务队列,循环出入队即可完成建树。这里是通过每次从中间分开左右子树来保证整棵树的平衡性。

  • 相关阅读:
    C++ allocator
    C++操作符重载
    Theron (C++ concurrency library) 读后感
    第五章 [BX]和loop指令
    第四章 第一个程序
    第三章 寄存器(内存访问)
    第二章 寄存器
    第一章
    jquery下ajax异步执行操作笔记
    CSSFlex布局
  • 原文地址:https://www.cnblogs.com/yanhewu/p/8399541.html
Copyright © 2020-2023  润新知