二进制树的递增高度

时间:2018-04-06 14:21:33

标签: c++ recursion binary-tree

当它是一个空的二叉树时,我得到所有期望的正确高度。大小应该为零,但是我得到1.我尝试在if语句之后更改返回(摆脱+1),但这只是弄乱了其他所有情况。

int BTree::recursive_height_helper(BSTNode *n) {

    int rHeight = 0;
    int lHeight = 0;

    if(n->right == NULL || n->left == NULL) return rHeight+lHeight+1;
    rHeight += recursive_height_helper(n->right);
    lHeight += recursive_height_helper(n->left);

     return rHeight+lHeight+1;
}

2 个答案:

答案 0 :(得分:3)

你根本不处理空树(除非你的树有一个哨兵根节点),树的高度不是子树高度的总和。

另外,这些行

int rHeight = 0;
int lHeight = 0;
if(n->right == NULL || n->left == NULL) return rHeight+lHeight+1;

相当于

if(n->right == NULL || n->left == NULL) return 1;

表示只有一个子树的树的高度为1,即使它应该计算节点也是不正确的。

您可以使用单行代码执行此操作:

int BTree::height(BSTNode *n) 
{
    return n == nullptr ? 0 : 1 + std::max(height(n->left), height(n->right));
}

答案 1 :(得分:0)

您可以使用空节点的基本情况来完成此操作,其余的就可以正常工作。

int Solution::maxDepth(BSTNode* A) {
    if(A == NULL)
        return 0;
    return max(maxDepth(A->left) + 1, maxDepth(A->right) + 1);
}