【发布时间】:2020-03-16 13:04:56
【问题描述】:
我正在尝试编写此函数,它将每个节点的余额存储在 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);
}
【问题讨论】:
-
对我来说似乎是正确的。
height也是递归函数调用吗?因为那时,虽然它是正确的,但你经常做同样的工作。考虑你的根的一个孩子。当您为根调用函数时,您计算这个孩子的高度,并以此为孙子调用height。现在,当您计算孩子的余额值时,您再次为孙子调用height。这并不是真正必要的,也许您想考虑一种不同的方法来做到这一点。另外,不要通过引用传递指针,通过值传递指针或通过引用传递BinaryNode。 -
但是逻辑是对的吧?
-
在我看来是这样。这肯定会遍历所有节点,并将此差异存储在节点中。我当然不能说
height这个方法是否正确,但是在本地这个方法是正确的。一个好的做法是为您的树编写一些测试(检查不同的输入与预期的结果)。
标签: c++ algorithm tree binary-search-tree