1

我正在构建一个二叉搜索树,我想创建一个函数来记录每个节点的高度并将其求和。我正在尝试使用递归。

对我来说,困难在于给每个节点分配一个高度,然后再回去总结。除非我可以一次性指定并记录高度?提前致谢。

编辑:最终代码显示对将来会看到这个的任何人来说对我有用的东西。谢谢你们的帮助。

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
4

1 回答 1

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
于 2013-10-11T14:44:04.897 回答