hackerank-30days of code-BST

♀尐吖头ヾ 提交于 2020-02-01 16:15:57

应该大家都挺熟悉的, 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,取决于后面的语句需不需要用到n,如果不需要n则需要追根溯源放在前面,如果像bubblesort 一样需要用到n,则放到后面

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!