순서 그룹 구조에 따라 두 갈래 찾기 트리 Convert Sorted Array to Binary Search Tree

1796 단어
제목은leetcode에서 유래했다.
제목: Given an array where elements are sorted in ascending order, convert it to a height balanced BST.
참조 가능한 자매 질문: 단일 체인 테이블 구조에 따라 두 갈래로 트리 찾기 Convert Sorted List to Binary Search Tree
사고방식: 여기서 주의해야 할 것은 균형적인 BST이다.역귀사상+이분찾기.정중간의 수를 뿌리로 하고 왼쪽과 오른쪽 두 부분을 왼쪽 나무와 오른쪽 나무로 한다.
/**
 * Definition for binary tree
 * struct TreeNode {
 *     int val;
 *     TreeNode *left;
 *     TreeNode *right;
 *     TreeNode(int x) : val(x), left(NULL), right(NULL) {}
 * };
 */
class Solution {
public:
    TreeNode *sortedArrayToBST(vector<int> &num) {
        int n = num.size();
        if(n == 0)// 
            return NULL;

        vector<int> leftv, rightv;        
        int i;
        for(i=0;i<n/2;i++)
            leftv.push_back(num[i]); // vector
        
        TreeNode *p = new TreeNode(num[i]);
        
        for(i++;i<n;i++)
            rightv.push_back(num[i]);// vector
            
        p->left = sortedArrayToBST(leftv);
        p->right = sortedArrayToBST(rightv);
        
        return p;
    }
};

코드 2: 코드 1에 추가 공간을 사용했는데 좌우 절반의 임시vector입니다.매개 변수로 아래 첨자 두 개를 추가한 다음 제자리에서vector를 사용하여 귀속할 수 있습니다.
class Solution {
public:
    TreeNode *sortedArrayToBST(vector<int> &num) {
        if(num.empty())
            return NULL;
        return generate(num, 0, num.size()-1);
    }
    
    TreeNode *generate(vector<int> &num, int left, int right)
    {
        if(left > right)
            return NULL;
        int mid = (right+left)/2;
        TreeNode *root = new TreeNode(num[mid]);
        root->left = generate(num, left, mid-1);
        root->right = generate(num, mid+1, right);
        return root;
    }
};

좋은 웹페이지 즐겨찾기