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;
}
};