hackerank-30days of code-BST

Hanna ·
更新时间:2024-11-15
· 702 次阅读

应该大家都挺熟悉的, 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


作者:有态度的我



bst days

需要 登录 后方可回复, 如果你还没有账号请 注册新账号