c++ - 检查BST中每个节点的平衡因子并将其存储在节点中

标签 c++ algorithm tree binary-search-tree

我正在尝试编写此函数,将每个节点的余额存储在 BST 中并将其存储在节点内。在我的 BST 中,我添加了变量 bal 来存储它。

在递归方面我仍然是一个初学者,所以请原谅任何错误我只需要帮助看看我的逻辑是否正确或者是否有更好的方法! 这是我的功能:

 void calculateBalanceValue(BinaryNode *& t)
        {
            if (t==nullptr) return;

            int left = height(t->left);
            int right = height(t->right);
            t->bal=abs(left -right);
            calculateBalanceValue(t->right);
            calculateBalanceValue(t->left);

        }

最佳答案

这个逻辑在我看来是合理的,但在我看来,将其速度提高大约两倍是相当微不足道的。

现在,您遍历每个子树一次以计算其高度,然后再次遍历 at 以计算其平衡度。

因为无论如何它都需要遍历子树来完成它的工作,所以我会让 calculateBalance 返回树的高度。这样一来,通过一次遍历计算平衡和高度就变得相当简单了。

因为我们不想修改传递给这个函数的指针,所以我只是按值传递指针。

int calculateBalanceValue(BinaryNode *t)
    {
        if (t==nullptr) 
            return 0;

        int left = calculateBalance(t->left);
        int right = calculateBalance(t->right);
        t->bal=abs(left -right);
        return 1 + std::max(left, right);
    }

顺便说一句,如果您想对工作代码进行评论,您可能需要查看 Stack Exchange 的 Code Review专门用于此目的的网站。

关于c++ - 检查BST中每个节点的平衡因子并将其存储在节点中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58960684/

相关文章:

c++ - 获取 vector 中 char 的位置 (C++)

c++ - 在 Copy 构造函数中分配整个对象?

c# - 如何在 C# 中使用 dlib 库

python - 将postgresql数据库表转换为json树python

python - lxml - 获取元素的平面列表

c++ - 线程之间的异常。我需要多少 std::exception_ptr 和同步?

algorithm - 生成大小为 N 的位网格还有哪些其他选项

swift - 面额任务递归算法的时间复杂度

algorithm - 检测两个矩形是否可以组合成一个矩形

javascript - 隐藏在矩形内的链接中的箭头