把排序數組轉換爲高度最小的二叉搜索樹-LintCode

描述:

給一個排序數組(從小到大),將其轉換爲一棵高度最小的排序二叉樹。

 注意事項

There may exist multiple valid solutions, return any of them.

樣例:

給出數組 [1,2,3,4,5,6,7], 返回

     4
   /   \
  2     6
 / \    / \
1   3  5   7

思路:

首先在這裏說明一下什麼是排序二叉樹

排序二叉樹具有以下幾個特點

(1)若左子樹不空,則左子樹上所有結點的值均小於它的根結點的值; 

(2)若右子樹不空,則右子樹上所有結點的值均大於它的根結點的值; 

(3)左、右子樹也分別爲二叉排序樹;

觀察排序二叉樹及所給出的排序數組可知,根節點是一組排序數的中間數,其左子樹爲中間數前的數組成,右子樹爲中間數後面的

數組成的,其左右子樹也遵循上述規律,由此我們可以不斷使用二分法進行遞歸操作完成排序二叉樹的建立。


代碼:

/**
 * Definition of TreeNode:
 * class TreeNode {
 * public:
 *     int val;
 *     TreeNode *left, *right;
 *     TreeNode(int val) {
 *         this->val = val;
 *         this->left = this->right = NULL;
 *     }
 * }
 */
class Solution {
public:
    /**
     * @param A: A sorted (increasing order) array
     * @return: A
     * 
     * node
     */
    TreeNode *sorted(vector<int> &A,int start,int end)
    {
        if(start>end)
        return NULL;
        int mid=(start+end)/2;
        TreeNode *r=new TreeNode(A[mid]);
        r->left=sorted(A,start,mid-1);
        r->right=sorted(A,mid+1,end);
        return r;
    }
    TreeNode *sortedArrayToBST(vector<int> &A) {
        // write your code here
        if(A.empty())
            return NULL;
            
        int start=0;
        int end=A.size()-1;
        int mid=(start+end)/2;
        TreeNode *root=new TreeNode(A[mid]);
        root->left=sorted(A,start,mid-1);
        root->right=sorted(A,mid+1,end);
        return root;
        
        
    }
};



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