我对二进制搜索树有疑问,此代码:

时间:2019-07-08 09:57:57

标签: python

cx

我有3个问题: 1. getHeight()函数如何工作? 2.为什么要使用getHeight()函数:

class Node:
    def __init__(self,data):
        self.right=self.left=None
        self.data = data
class Solution:
    def insert(self,root,data):
        if root==None:
            return Node(data)
        else:
            if data<=root.data:
                cur=self.insert(root.left,data)
                root.left=cur
            else:
                cur=self.insert(root.right,data)
                root.right=cur
        return root

    def getHeight(self,root):
        #Write your code here
        if not root:
            return -1
        else:
            return max(self.getHeight(root.right), self.getHeight(root.left)) + 1
T=int(input())
myTree=Solution()
root=None
for i in range(T):
    data=int(input())
    root=myTree.insert(root,data)
height=myTree.getHeight(root)
print(height)  

为什么返回-1,而不是0

3。并在此代码中:

if not root:
        return -1

我认为结果的最大值将为+ 1,但这不是真的,它将为* 1,我尝试了2,将为* 2,我尝试了3,它将为*3。你能解释一下吗?

1 个答案:

答案 0 :(得分:0)

您的问题的某些部分尚不完全清楚,但我认为这些答案可以解决您的问题。我非常愿意进行编辑以提高清晰度:

  1. getHeight()是一个递归函数,因此按其本身进行调用 沿着树前进。 http://pages.cs.wisc.edu/~calvin/cs110/RECURSION.html
  2. 这会设置它,因此当您到达分支的末尾时,它将从另一个分支中选择最大值,或者如果到达两个分支,则不会添加不需要的图层,因为(+1)+(-1 )= 0。
  3. 代码最后一部分背后的想法是继续做类似的事情:answer = 1 +沿着最长的链向下再做一次。因此,您为树的所有级别添加了+1。最后,您将获得第2部分中解释的结果,并为您提供正确的结果。

第3部分的示例

      A
   B     C
  D E
  1. 当我们检查A时,我们返回max(left,right)+1。这意味着我们 必须检查B和C。
  2. 对于C,我们返回max(left,right)+1,因为没有剩余值,或者 在下面,它返回-1,C的分数为-1 + 1 = 0。
  3. 对于B,我们返回max(left,right)+1,因此请检查D和E
  4. 对于D以及对于E,我们都返回max(left,right)+1,因为 左下方或右下方没有任何内容,则返回-1,并且得分 D和E均为-1 + 1 = 0。因此,让我们开始备份
  5. 基于集合4 B = max(0,0)+1 = 1。
  6. 备份到A,这是唯一尚未解决的问题,我们有A = max(1,0)+1 = 2

所以我们的分数是2