Python二进制搜索树高函数

2024-09-30 01:32:18 发布

您现在位置:Python中文网/ 问答频道 /正文

我一直在尝试递归方法,但被困太久了。我不知道是我的BST代码错了还是我的递归

不管我在树中放了多少元素,我仍然从height函数中得到值2

class Treenode:
    def __init__(self, value = None, rchild = None, lchild = None):
        self.value = value
        self.rchild = rchild
        self.lchild = lchild

class bin_tree:
   def __init__(self):
        self.root = None

   def put(self, x):
       if self.root is None:
           self.root = Treenode(x)
           return True
       if self.exists(x) == True:
           return False

       p = self.root

       while True:
           if x < p.value:
              if p.lchild is None:
                 p.lchild = Treenode(x)
                 return True
               else:
                   p = p.lchild
           elif x > p.value:
               if p.rchild is None:
                  p.rchild = Treenode(x)
                  return True
               else:
                  p = p.rchild
                  return

   def exists(self, x):
      p = self.root
         while True and p != None:
            if p.value == x:
               return True
            elif p.value > x and p.lchild != None:
               p = p.lchild
            elif p.value < x and p.rchild != None:
               p = p.rchild
            else:
               return False

   def isempty(self):
      return self.root == None

   def height(self):
      def gh(enrot):
         if enrot == None:
            return 0
         else:
            return 1 + max(gh(enrot.lchild), gh(enrot.rchild))
      return gh(self.root)

示例代码:

from Bintree import *

p = bin_tree()

x = input()

for word in x.split():
    p.put(word)

a = input()

if p.exists(a) is True:
    print('Exists!')
else:
    print('Does not exist!')

print(p.isempty())

print(p.height())

Tags: selfnonetruereturnifisvaluedef
1条回答
网友
1楼 · 发布于 2024-09-30 01:32:18

height方法很好。在put方法中,在没有实际添加元素的情况下停止,因此高度实际上不会超过2:

   def put(self, x):
       ...
       while True:
           if x < p.value:
              ...
           elif x > p.value:
               if p.rchild is None:
                  ...
               else:
                  p = p.rchild
                  return
#                 ^^^^^^ This shouldn't be here.

相关问题 更多 >

    热门问题