【发布时间】:2021-10-21 11:23:32
【问题描述】:
我正在努力寻找我在二叉搜索树中创建的 get_size 方法的时间复杂度,因为存在多个条件的多次递归。这里是代码
`class Node:
def __init__(self, data, left=None, right=None):
self.data = data
self.right = right
self.left = left
def __str__(self):
return str(self.data)
我为库存数据创建了节点类,然后我创建了 BST 函数,它确实可以工作,但问题是每个函数的时间复杂度都应该是函数中的 log n,但我同时使用了 if elif else 和双递归它是否会影响运行时间如果它会为什么如果它不为什么会运行时间
class BST:
def __init__(self):
self.root = None
def add(self, value, x=None):
new_node = Node(value)
if self.root is None:
self.root = new_node
return True
if x is None:
main_node = self.root
else:
main_node = x
if value > main_node.data:
if main_node.left is None:
main_node.left = new_node
return True
else:
return self.add(value, main_node.left)
elif value == main_node.data:
return False
elif value < main_node.data:
if main_node.right is None:
main_node.right = new_node
return True
else:
return self.add(value, main_node.right)
def get_size(self, x=None):
if self.root is None:
return 0
if x is None:
main_node = self.root
else:
main_node = x
if main_node.left is not None and main_node.right is not None:
return 1 + self.get_size(main_node.left) + self.get_size(main_node.right)
elif main_node.left is None and main_node.right is None:
return 1
else:
if main_node.left is not None:
return 1 + self.get_size(main_node.left)
else:
return 1 + self.get_size(main_node.right)`
【问题讨论】:
-
如果不访问每个节点,就不可能找到任意 BST 的大小。但是,您可以添加一个字段
self.size = 0,并在添加节点时将其递增,在删除节点时将其递减。那么get_size是O(1),return self.size。
标签: recursion time-complexity binary-tree big-o binary-search-tree