此列表是二进制搜索树吗?

时间:2010-12-27 03:40:42

标签: java binary-tree binary-search

以下列表是否为BST?

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

我有办法确定吗?

考虑我的列表将有100000个元素。

2 个答案:

答案 0 :(得分:4)

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

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

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

parent = pop()
right = pop()
left = pop()
push new Node(parent, left, right)
那么你应该得到一个有效的BST。但我只是在这里推测。

答案 1 :(得分:1)

您有一个列表,您需要从此列表中构建BST

BST具有以下属性

1-每个节点都有两个子节点,或者它是一个叶子节点

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

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

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

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

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

考虑以下

node = {1,2,3,4,5}

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