【c++&leetcode】1382. Balance a Binary Search Tree

问题入口

DSW (DAY, STOUT & WARREN) ALGORITHM

时间复杂度O(n)

cpp 复制代码
class Solution {
public:
    int makeVine(TreeNode* grand, int cnt = 0)
    {
        auto n = grand->right;
        while (n != nullptr)
        {
            if(n->left != nullptr)
            {
                auto old_n = n;
                n = n->left;
                old_n->left = n->right;
                n->right = old_n;
                grand->right = n;
            }
            else{
                cnt++;
                grand = n;
                n = n->right;
            }
        }
        return cnt;
        
    }
    void compress(TreeNode *grand, int m) {
        auto n = grand->right;
        while (m-- > 0)
        {
            auto old_n = n;
            n = n->right;
            grand->right = n;
            old_n->right = n->left;
            n->left = old_n;
            grand = n;
            n = n->right;
        }
        
    }
    TreeNode* balanceBST(TreeNode *root) {
        TreeNode grand;
        grand.right = root;
        auto cnt = makeVine(&grand);
        int m = pow(2, int(log2(cnt + 1))) - 1;
        compress(&grand, cnt - m);
        for (m = m / 2; m > 0; m /= 2)
            compress(&grand, m);
        return grand.right;
    }
};
  1. 将最初的树转变为藤蔓。 通过进行右旋转,我们将树展平为"链表",其中头是以前最左边的节点,尾部是以前最右边的节点。

  2. 将树转换为藤蔓后,计算 节点总数(cnt)。

  1. 计算最接近的完美平衡树的高度:h = log2(cnt + 1)。

  2. 计算最接近的完美平衡树中的节点数:m = pow(2, h) - 1。

  3. 向左旋转 cnt - m 个节点以掩盖多余的节点。

  1. 左旋转 m/2 个节点。

  2. 将 m 除以 2,并在 m / 2 大于零时重复上述步骤。

相关推荐
kebidaixu18 分钟前
两轮BMS 短路保护策略详解
算法
王老师青少年编程32 分钟前
2026年6月GESP真题及题解(C++二级):完全平方数计数
c++·题解·真题·gesp·二级·2026年6月·完全平方数计数
zwenqiyu36 分钟前
非线性字符串数据结构串讲
数据结构·c++·学习·算法
z小猫不吃鱼37 分钟前
03 Optimal Brain Surgeon 详解:Hessian 剪枝为什么有效?
算法·机器学习·剪枝
硕风和炜1 小时前
【LeetCode: 1301. 最大得分的路径数目 + DP】
java·算法·leetcode·动态规划·dp·记忆化搜索
用户99045017780091 小时前
做了一个AI诊断,参考倪海厦中医理论,科学养生
算法
努力中的编程者1 小时前
STL-vector的模拟实现
开发语言·c++·算法·stl·vector
没文化的阿浩2 小时前
【C++】详解继承机制
开发语言·c++
weixin_400005602 小时前
RL-frenet-trajectory-planning-in-CARLA
人工智能·深度学习·算法·机器学习·自动驾驶
Keven_112 小时前
AcWing算法提高课思路速查:动态规划
算法·动态规划