【LeetCode】-- 108. 순서 배열을 이진 검색 트리로 변환

1. 질문

108. 순서 배열을 이진 검색 트리로 변환 - LeetCode

요소가 오름차순으로 정렬된 정수 배열 nums가 제공됩니다. 이를 높이 균형 이진 검색 트리로 변환하세요. 높이 균형 이진 트리는 "각 노드의 왼쪽 서브 트리와 오른쪽 서브 트리의 높이 차이의 절대값이 1을 초과하지 않는다"를 만족하는 이진 트리이다.

2. 예시

输入:nums = [-10,-3,0,5,9]
输出:[0,-3,9,-10,null,5]
解释:[0,-10,5,null,-3,null,9] 也将被视为正确答案:

 

 

 

输入:nums = [1,3]
输出:[3,1]
解释:[1,null,3] 和 [3,1] 都是高度平衡二叉搜索树。

 

 

3. 분석

이진 트리를 볼 때 가장 먼저 나타나는 반응은 재귀를 사용하는 것입니다.

정렬된 배열을 이진 트리로 바꾸려면 루트를 찾아야 합니다. 루트는 정렬된 배열의 중간에 있는 숫자입니다. 루트는 정렬된 배열을 두 부분으로 나눕니다. 왼쪽은 트리의 왼쪽 하위 트리입니다. , 오른쪽은 트리의 오른쪽 하위 트리입니다. 하위 트리, 그런 다음 왼쪽 하위 트리의 루트와 오른쪽 하위 트리의 루트를 찾습니다. 왼쪽 하위 트리의 루트는 배열의 왼쪽 절반 중앙에 있는 숫자입니다. , 오른쪽 하위 트리의 루트는 배열의 오른쪽 절반 중앙에 있는 숫자입니다.

4. 코드 구현

class Solution {
public:
    
    TreeNode* sortedArrayToBST(vector<int>& nums) 
    {
        return binaryTree(nums,0,nums.size() - 1);
    }
    
    //递归建立二叉树
    TreeNode* binaryTree(vector<int>& nums,int left,int right)
    {
        if(left > right)
        {
            return nullptr;
        }
        
        //计算根的数据值
        int mid = (left + right) / 2;
        
        //建二叉树
        TreeNode* root = new TreeNode(nums[mid]);
        root->left = binaryTree(nums,left,mid - 1);
        root->right = binaryTree(nums,mid + 1,right);

        return root;
    }
};

Supongo que te gusta

Origin blog.csdn.net/gx714433461/article/details/130006808
Recomendado
Clasificación