当它是一个空的二叉树时,我得到所有期望的正确高度。大小应该为零,但是我得到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;
}
答案 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);
}