先中序遍历得到序列,再二分建树,必定是平衡二叉树
class Solution {
vector<int> in;
public:
void inOrder(TreeNode* root)
{
if(root == nullptr) return;
inOrder(root->left);
in.push_back(root->val);
inOrder(root->right);
}
TreeNode* buildTree(int start, int end)
{
if(start > end) return nullptr;
int mid = (start + end) >> 1;
TreeNode *root = new TreeNode(in[mid]);
root->left = buildTree(start, mid - 1); // 左边
root->right = buildTree(mid + 1, end);
return root;
}
TreeNode* balanceBST(TreeNode* root) {
inOrder(root);
return buildTree(0, in.size() - 1);
}
};
本文介绍了一种通过中序遍历序列结合二分查找构建平衡二叉搜索树的方法。首先,利用递归进行中序遍历获得节点值序列;然后,通过二分法在序列中选择中点作为根节点,递归构建左右子树,确保最终生成的树为平衡状态。
397

被折叠的 条评论
为什么被折叠?



