应该大家都挺熟悉的, BST 的特点:
- 节点的左子树仅包含其键小于该节点的键的节点。
- 节点的右子树仅包含键大于该节点的键的节点。
- 左和右子树也都必须是二进制搜索树。
这道题是计算BST 的高度, 首先从root开始,然后分别计算左右孩子的高度, 然后 因为是算edge,所以就不用+1;
int getHeight(Node* root){
//Write your code here
if(root == nullptr)
{
return 0;
}
int leftCount = this->getHeight(root->left);
if(root->left != nullptr)
{
leftCount ++;
}
int rightCount = this->getHeight(root->right);
if(root->right != nullptr)
{
rightCount ++;
}
return leftCount>rightCount ? leftCount:rightCount;
}
还是需要考虑root是否为null,这是recursive的终止条件, ,如果不为nullptr,就有左指针或右指针, 分别计算,知道叶子层的时候, child=0,此时返回倒数第一层的height, 自下而上, 得出倒数第二层的高度–>直到最后一个循环,是root的下一层的高度, 由于是计算edge数量 , 因此不需要+1;return root(总是返回开始的父母),总结一下就是循环getHeight得到的是当前node 不包含它自己这一层的height,因此后面返回到更高一层,需要加上自己。关于recursive语句是放前面还是放最后,主要依据recursive每个物体前后有无关系, 追根溯源 的放前面, 各做各的就放后面相当与一个for loop