【问题标题】:Is this list a Binary Search Tree?这个列表是二叉搜索树吗?
【发布时间】:2017-09-01 21:58:21
【问题描述】:

以下列表是否为 BST?

list:{2,5,3,8,6}

有什么方法可以确定吗?

假设我的列表将包含 100000 个元素。

【问题讨论】:

  • 维基百科知道许多基本数据类型,包括BST。但是,如果您有一个 排序列表,则可以在其上运行 Binary Search。 Binary Search 是一种算法,而不是像 Binary Search Tree 这样的数据类型——根据定义,BST 必须始终有效地排列(作为树),但列表可能并不总是保持排序(除非它是“Sorted列表”或其他东西 ;-)

标签: java binary-tree binary-search


【解决方案1】:

快速回答是:不。 BST 是一棵树,你有一个列表。

长答案是:可以将树编码为列表,在这种情况下,您的列表是否可以解码为树将取决于编码算法。有关详细信息,请参阅 BST wiki 页面http://en.wikipedia.org/wiki/Binary_search_tree

事实上,您的列表可能是 BST 的编码版本。如果您从左到右读取元素,将它们推入堆栈,并且每当您堆栈有 3 个元素时:

parent = pop()
right = pop()
left = pop()
push new Node(parent, left, right)

那么你应该得到一个有效的 BST。但我只是在这里推测。

【讨论】:

    【解决方案2】:

    你有一个列表,你需要从这个列表中构造 BST

    BST 具有以下属性

    1- 每个节点有两个孩子或者是叶子节点

    2- 对于每个节点,它的左子树小于节点的值

    3- 对于每个节点,它的右子树都大于节点的值

    bst 必须平衡,即在 BST 中插入节点时,代码必须遵守上述 3 个条件。

    在 BST 中搜索是 O(log n) 操作,因为 ,每个搜索步骤将搜索空间分成两半并选择一半。

    有一种情况,搜索需要 O(N) 时间

    考虑关注

    节点 = {1,2,3,4,5}

    如果我们从这个节点集合中创建 BST,它将是右对齐的,这意味着每个下一个节点都将在右子树上,这里如果我们想搜索一个项目,我们需要像链接一样遍历整个右子树列表。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-08
      • 1970-01-01
      • 2018-06-16
      相关资源
      最近更新 更多