Data structures LinkedList和二叉搜索树之间的区别

Data structures LinkedList和二叉搜索树之间的区别,data-structures,linked-list,language-agnostic,binary-search-tree,Data Structures,Linked List,Language Agnostic,Binary Search Tree,链表和二进制搜索树之间的主要区别是什么?BST只是维护LinkedList的一种方式吗?我的导师谈到了LinkedList和BST,但没有对它们进行比较,也没有说什么时候应该选择其中一个。这可能是个愚蠢的问题,但我真的很困惑。如果有人能以一种简单的方式澄清这一点,我将不胜感激。我想说的主要区别是二叉搜索树是排序的。当您插入到二元搜索树中时,这些元素最终存储在内存中的位置是其值的函数。使用链表时,元素会盲目地添加到列表中,而不考虑其值 您可以立即进行一些权衡: 链表保留插入顺序,插入成本更低 二叉

链表和二进制搜索树之间的主要区别是什么?BST只是维护LinkedList的一种方式吗?我的导师谈到了LinkedList和BST,但没有对它们进行比较,也没有说什么时候应该选择其中一个。这可能是个愚蠢的问题,但我真的很困惑。如果有人能以一种简单的方式澄清这一点,我将不胜感激。

我想说的主要区别是二叉搜索树是排序的。当您插入到二元搜索树中时,这些元素最终存储在内存中的位置是其值的函数。使用链表时,元素会盲目地添加到列表中,而不考虑其值

您可以立即进行一些权衡: 链表保留插入顺序,插入成本更低 二叉搜索树通常搜索速度更快

在计算机科学中,a是一种具有以下特性的二叉树数据结构:

  • 每个节点(树中的项)都有一个不同的值
  • 左子树和右子树也必须是二叉搜索树
  • 节点的左子树只包含小于节点值的值
  • 节点的右子树仅包含大于或等于节点值的值
在计算机科学中,a是基本数据结构之一,可用于实现其他数据结构


所以二叉搜索树是一个抽象概念,可以用链表或数组来实现。而链表是一种基本的数据结构

链表和BST实际上没有太多共同之处,只是它们都是充当容器的数据结构。基本上允许您在列表中的任何位置高效地插入和删除元素,同时保持列表的顺序。这个列表是使用从一个元素到下一个元素(通常是上一个)的指针实现的

另一方面,A是一个更高抽象的数据结构(即,它没有指定如何在内部实现),允许高效搜索(即,为了找到一个特定的元素,您不必查看所有的元素)

请注意,链表可以看作是退化的二叉树,即所有节点只有一个子节点的树。

链表:

Item(1) -> Item(2) -> Item(3) -> Item(4) -> Item(5) -> Item(6) -> Item(7)
二叉树:

                 Node(1)
                /
            Node(2)
           /    \
          /      Node(3)
  RootNode(4)
          \      Node(5)
           \    /
            Node(6)
                \
                 Node(7)
在链接列表中,项目通过单个下一个指针链接在一起。 在二叉树中,每个节点可以有0、1或2个子节点,其中(在二叉搜索树的情况下)左节点的键小于节点的键,右节点的键大于节点。只要树是平衡的,每个项目的搜索路径都比链表中的短得多

搜索路径:

------ ------ ------
key    List   Tree
------ ------ ------
1      1      3
2      2      2
3      3      3
4      4      1
5      5      3
6      6      2
7      7      3
------ ------ ------
avg    4      2.43
------ ------ ------
结构越大,平均搜索路径越小:

------ ------ ------
items  List   Tree
------ ------ ------
     1      1   1
     3      2   1.67
     7      4   2.43
    15      8   3.29
    31     16   4.16
    63     32   5.09
------ ------ ------

二叉搜索树可以以任何方式实现,它不需要使用链表

链表只是一种结构,其中包含节点和指向节点内其他节点的指针/引用。给定列表的头节点,您可以浏览到链表中的任何其他节点。双链表有两个指针/引用:对下一个节点的正常引用,但也对上一个节点的引用。如果最后一个节点n双链接列表引用列表中的第一个节点作为下一个节点,第一个节点引用最后一个节点作为其上一个节点,称为循环列表

二元搜索树是一种基于二元搜索比较算法将其输入分成大致相等的两部分的树。因此,它只需要很少的搜索就可以找到一个元素。例如,如果你有一个1-10的树,你需要搜索三个,首先会检查顶部的元素,可能是5或6。三将小于该值,因此只会检查树的前半部分。如果下一个值为3,则您拥有它,否则,将执行比较等操作,直到找不到它或返回其数据。因此,树的查找速度很快,但插入或删除速度不一定很快。这些都是非常粗略的描述


来自维基百科,也来自维基百科。

链表就是……一个列表。它是线性的;每个节点都有一个对下一个节点的引用(如果你说的是双链表的话,还有上一个).A树分支---每个节点都有对不同子节点的引用。二叉树是一种特殊情况,其中每个节点只有两个子节点。因此,在链表中,每个节点都有一个前一个节点和一个下一个节点,而在二叉树中,一个节点有一个左子节点、右子节点和父节点


这些关系可能是双向的,也可能是单向的,这取决于您需要如何遍历结构。

它实际上非常简单。链表只是一组链接在一起的项目,没有特定的顺序。您可以将其视为一棵非常瘦的树,从不分支:

1->2->5->3->9->12->i.
(最后一个是对终止null的ascii艺术尝试)

二元搜索树有两种不同的方式:二元部分表示每个节点有两个子节点,而不是一个子节点,搜索部分表示这些子节点被安排为加快搜索速度-左侧只有较小的项目,右侧只有较大的项目:

    5
   / \
  3   9
 / \   \
1   2   12
9没有左生子,1、2和12是“叶子”——它们没有分支

有道理吗


<>对于大多数“查找”类型的使用,BST较好。但是对于“保持一个事物列表来处理以后先入先出或先入先出”的各种事物,链表可能工作得很好。

链表是一个直的线性数据,相邻节点彼此连接,例如A->B->C。 BST是一种层次结构,就像一棵树,主干和分支相连,而这些分支又和其他分支相连

public class LinkedListNode
{
     Object Data;
     LinkedListNode NextNode;
}
public class BSTNode
{
    Object Data
    BSTNode LeftNode;
    BSTNode RightNode;
}