プログラマーインタビューゴールデンクラシック-インタビューの質問04.02。最小高さツリー

1.トピックの紹介

異なる要素を持ち、昇順で配置された整数の順序付けられた配列が与えられた場合、最小の高さのバイナリ検索ツリーを作成するアルゴリズムを記述します。

例:
順序付けられた配列がある場合:[-10、-3,0,5,9]、

考えられる答えの1つは、[0、-3,9、-10、null、5]です。これは、次の高度にバランスの取れたバイナリ検索ツリーを表すことができます。

          0 
         / \ 
       -3 9 
       / / 
     -10 5 

出典:LeetCode
リンク:https ://leetcode-cn.com/problems/minimum-height-tree-lcci
著作権はLeetCodeが所有しています商用の再版については、公式の承認に連絡してください。非商用の再版については、出典を示してください。

2つの問題解決のアイデア

        最小高さツリーが満たす特性:ノードの左右のサブツリー間の高さの差は1を超えません。タイトルの要件に応じて、再帰的方法を使用して、指定されたシーケンスの中間位置を継続的に検索し、検索バイナリツリーノードを構築します。詳細については、コードを参照してください。

3つの問題解決コード

class Solution {
public:
    //最小高度树满足的条件:任意节点的左右子树的高度差不能超过1
    TreeNode* sortedArrayToBST(vector<int>& nums) {
        return dfs(nums, 0, nums.size()-1);
    }

    TreeNode* dfs(vector<int>& nums, int l, int r)
    {
        if(l > r)
            return NULL;
        int mid = (l+r) >> 1;
        TreeNode* node = new TreeNode(nums[mid]);
        node->left = dfs(nums, l, mid-1);
        node->right = dfs(nums, mid+1, r);
        return node;  
    }
};

4つの問題解決の結果

おすすめ

転載: blog.csdn.net/qq_39661206/article/details/108143614