计算二叉搜索树中项目的出现次数
Posted
技术标签:
【中文标题】计算二叉搜索树中项目的出现次数【英文标题】:Counting occurrence of an item in a binary search tree 【发布时间】:2021-06-11 01:01:52 【问题描述】:我正在研究二叉搜索树的计数方法,但不知道如何实现它。
class BinarySearchTree:
def __init__(self, root: Optional[Any]) -> None:
if root is None:
self._root = None
self._left = None
self._right = None
else:
self._root = root
self._left = BinarySearchTree(None)
self._right = BinarySearchTree(None)
def is_empty(self) -> bool:
return self._root is None
def __contains__(self, item: Any) -> bool:
if self.is_empty():
return False
elif item == self._root:
return True
elif item < self._root:
return item in self._left
else:
return item in self._right
def count(self, item: Any) -> int: # not sure how to finish implementing this
if self.is_empty():
return 0
count = 0
elif item == self._root: # python says this is an illegal target for variable annotation
count += 1
到目前为止,如果树为空,此方法将返回 0。如果根为 树就是我要找的项目。
但它不会让我将项目与根进行比较。还有,我 需要检查其余的分支(左,右),看看是否有更多的出现 物品。我可以就如何执行此操作获得一些帮助吗?
【问题讨论】:
【参考方案1】:您的代码中有两个语法错误:
缩进不正确:if
的缩进程度不如对应的elif
你不能在if
块和elif
块之间有另一个语句,所以count = 0
不能出现在你现在拥有它的地方,除非你将elif
更改为普通的if
此外,您的函数旨在返回int
,但只有当树为空时,它才会返回它。在另一种情况下,它将返回None
。
您需要应用递归来进行计数。如果一个 BST 有重复的值,那么如果你已经到达第一次出现,那么它的左子树和右子树中都有重复的值。因此,在这种情况下,您需要在两个子树中递归。
下面是它的编码方式:
def count(self, item: Any) -> int:
if self.is_empty():
return 0
count: int = 0
if item == self._root:
count = 1
if item <= self._root:
count += self._left.count(item)
if item >= self._root:
count += self._right.count(item)
return count
【讨论】:
太棒了!感谢您的帮助! 很高兴听到它对您有用。不要忘记mark the answer as accepted。以上是关于计算二叉搜索树中项目的出现次数的主要内容,如果未能解决你的问题,请参考以下文章