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;
    }
};
发布了83 篇原创文章 · 获赞 12 · 访问量 1万+

猜你喜欢

转载自blog.csdn.net/qq_42317011/article/details/102489987