hackerank-30days of code-BST

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值