二叉搜索树的总高度

时间:2013-10-11 14:27:07

标签: c++ recursion height binary-search-tree

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

对我来说,困难在于为每个节点分配一个高度,然后返回并总结它。除非我可以一次性分配和记录高度?提前谢谢。

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

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

1 个答案:

答案 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