LeetCode_Convert Sorted Array to Binary Search Tree

一.題目

Convert Sorted Array to Binary Search Tree

  Total Accepted: 44608 Total Submissions: 131357My Submissions

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

Show Tags
Have you met this question in a real interview?  
Yes
 
No

Discuss





二.解題技巧

    將二叉查找樹進行中序遍歷,就可以得到一個升序排序的數組,因此,一個已經排序的數組可以看做一箇中序遍歷得到的數組,要得到一個高度平衡的二叉查找樹,可以使得左右子樹的節點數儘可能相等,因此,可以採用二分法將數組分爲兩個子數組,中間值作爲父節點,左邊的子數組作爲左子樹,右邊的子數組作爲右子樹進行遞歸,這樣就可以得到一個高度平衡的二叉查找樹。


三.實現代碼

#include <iostream>
#include <vector>

using std::vector;

/**
* Definition for a binary tree node.
* struct TreeNode {
*     int val;
*     TreeNode *left;
*     TreeNode *right;
*     TreeNode(int x) : val(x), left(NULL), right(NULL) {}
* };
*/


struct TreeNode
{
    int val;
    TreeNode *left;
    TreeNode *right;
    TreeNode(int x) : val(x), left(NULL), right(NULL) {}
};


class Solution
    {
private:
    TreeNode* sortedArrayToBST(vector<int>::iterator Begin,
                               vector<int>::iterator End)
        {
        if (Begin == End)
                {
                return NULL;
                }

        vector<int>::iterator HeadIte = Begin + (End - Begin) / 2;
        TreeNode *Head = new TreeNode(*HeadIte);

        TreeNode *LeftChild = sortedArrayToBST(Begin, HeadIte);
        TreeNode *RightChild = sortedArrayToBST(HeadIte + 1, End);

        Head->left = LeftChild;
        Head->right = RightChild;

        return Head;
        }
public:
    TreeNode* sortedArrayToBST(vector<int>& nums)
        {
        return sortedArrayToBST(nums.begin(), nums.end());
        }
    };




四.體會

    這道題的技巧主要在於二叉查找樹的中序遍歷就是一個升序的數組,因此,本題就是根據一個二叉查找樹的中序構建一個二叉查找樹,由於要求高度平衡,因此,可以考慮左右兩個子樹的結點個數相同,這樣就可以得到唯一的一顆二叉查找樹。



版權所有,歡迎轉載,轉載請註明出處,謝謝微笑





發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章