leetcode108.將有序數組轉成高度平衡二叉搜索樹

將一個按照升序排序的有序數組,轉換爲一顆高度平衡二叉搜索樹。

一個高度平衡二叉樹又稱爲AVL樹是指一個二叉樹每個節點的左右兩個子樹的高度的絕對值不超過1

例如:

[-10, -3, 0, 5, 9]

​ 一個可能的答案是:[0, -3, 9, 10, null, 5],它可以表示下面這個高度平衡二叉搜索樹

   0
 /   \
-3   9
/    /
-10  5

AVL樹又稱爲高度平衡的二叉搜索樹。它能保持二叉樹的高度平衡,儘量降低二叉樹的高度,減少樹的平均搜索長度。

​ AVL樹性質:

  • 左子樹和右子樹的高度之差的絕對值不超過1
  • 樹中的每個左子樹和右子樹都是AVL樹
  • 每個節點都有一個平衡因子(balance factor–bf),任一節點的平衡因子是-1,0,1. (每個節點的平衡因子等於右子樹的高度減去左子樹的高度)

由於AVL樹要求左右子樹高度差的絕對值不超過,因此AVL樹必須通過旋轉調平衡因子保持平衡。

/**
 * 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) {
        return sortedArrayToBST(nums, 0, nums.size()-1);
    }

    TreeNode* sortedArrayToBST(vector<int>& nums, int left, int right) {
        int len = right - left + 1;
        if(len == 0) return nullptr;
        int mid = (right + left)/2;
        TreeNode *root = new TreeNode(nums[mid]);
        if(len == 0) return root;
        root -> left = sortedArrayToBST(nums, left, mid-1);
        root -> right = sortedArrayToBST(nums, mid+1, right);
        return root;
    }
};
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章