我正在构建二进制搜索树,我想创建一个记录每个节点高度并对其求和的函数。我正在尝试使用递归。
对我来说,困难在于为每个节点分配一个高度,然后返回并总结它。除非我可以一次性分配和记录高度?提前谢谢。
编辑:最终代码,以显示对我将来会看到这个的人有用的东西。谢谢你的帮助。
BST.h
int totalheight(node);
int getHeight(node);
class BST {
Node root;
public:
BST { root = NULL; }
int totalheight()
{ return ::totalheight(root);
};
BST.cpp
int totalHeight(BSTNode* node)
{
if (node == NULL)
return -1;
int leftHeight = getheight(node->left);
int rightHeight = getheight(node->right);
int totalheight = 1 + leftHeight + rightHeight; // +1 to count the root
return totalheight;
}
int getheight(BSTNode* node)
{
if (node == NULL)
return 0;
return 1 + max(getheight(node->left), getheight(node->right));
}
main.cpp
int main() {
BST tree; // and various inserts
tree.totalheight();
} // main
答案 0 :(得分:2)
这里有一个问题:
int myheight = max(leftheight, rightheight);
应该是:
int myheight = max(leftheight, rightheight) + 1;
您需要为此节点高度计算一个。此处显示的代码findHeight
应该是getHeight
。
这是一个整体功能:
int getheight(BSTNode* node)
{
if (node == null)
return 0;
else
return 1 + max(getHeight(node->left), getHeight(node->right));
} // getheight