LeetCode 108——將有序數組轉化爲二叉搜索樹

1. 題目

2. 解答

一棵高度平衡的二叉搜索樹意味着根節點的左右子樹包含相同數量的節點,也就是根節點爲有序數組的中值

因此,我們將數組的中值作爲根節點,然後再遞歸分別得到左半部分數據轉化的左子樹和右半部分數據轉化的右子樹即可。

遞歸終止的條件是數組爲空,這時候返回 NULL。

/**
 * Definition for a binary tree node.
 * struct TreeNode {
 *     int val;
 *     TreeNode *left;
 *     TreeNode *right;
 *     TreeNode(int x) : val(x), left(NULL), right(NULL) {}
 * };
 */
class Solution {
public:
    TreeNode* sortedArrayToBST(vector<int>& nums) {
        
        int num = nums.size(); 
        if (num == 0) return NULL; // 數組爲空
        int mid = num / 2;
                
        TreeNode * tree = new TreeNode(nums[mid]); // 中值作爲根節點
        vector<int> left_nums = vector<int>(nums.begin(), nums.begin() + mid);
        tree->left = sortedArrayToBST(left_nums); // 左子樹
        
        vector<int> right_nums = vector<int>(nums.begin() + mid + 1, nums.end());
        tree->right = sortedArrayToBST(right_nums); // 右子樹
        
        return tree;
    }
};

獲取更多精彩,請關注「seniusen」!

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