【问题标题】:Searching an item in a balanced binary tree在平衡二叉树中搜索项目
【发布时间】:2017-08-23 18:20:59
【问题描述】:
如果我有一个平衡二叉树并且我想在其中搜索一个项目,那么大哦时间复杂度会是 O(n) 吗?是否会在二叉树中搜索一个项目,无论它是否平衡都会改变 O(n) 的大时间复杂度?我知道如果我们有一个平衡的 BST,那么搜索一个项目就相当于 BST 的高度,所以 O(log n) 但是普通的二叉树呢?
【问题讨论】:
标签:
time-complexity
binary-tree
big-o
【解决方案1】:
平衡 BST 中的 O(log n) 搜索时间由两个属性促进:
- 树中的元素通过比较排列
- 树是(大约)平衡的。
如果您丢失了这些属性中的任何一个,那么您将不再获得 O(log n) 搜索时间。
如果您要在未排序的平衡二叉树(也不是 BST)中搜索特定值,则必须检查树中的每个节点以确保找到您要查找的值,所以它需要 O(n) 时间。
对于不平衡的树,如果您想象最坏的不平衡情况可能会有所帮助,在这种情况下,每个节点都只有一个子节点,除了叶子节点——本质上是一个链表。如果你有一个完全(或大部分)不平衡的 BST,搜索将花费 O(n) 时间,就像链表一样。
如果未排序的二叉树是不平衡的,它仍然有n个节点并且它们仍然是未排序的,所以仍然需要O(n)时间。