freeCodeCamp/curriculum/challenges/chinese/10-coding-interview-prep/data-structures/check-if-an-element-is-pres...

93 lines
2.9 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

---
id: 587d8257367417b2b2512c7c
title: 检查二进制搜索树中是否存在元素
challengeType: 1
videoUrl: ''
---
# --description--
现在我们对二进制搜索树有了一般意义,让我们更详细地讨论它。二进制搜索树为平均情况下的查找,插入和删除的常见操作提供对数时间,并且在最坏情况下提供线性时间。为什么是这样?这些基本操作中的每一个都要求我们在树中找到一个项目(或者在插入的情况下找到它应该去的地方),并且由于每个父节点处的树结构,我们向左或向右分支并且有效地排除了一半的大小剩下的树。这使得搜索与树中节点数的对数成比例,这在平均情况下为这些操作创建对数时间。好的,但最坏的情况呢?那么,可考虑从以下值建构一棵树,将它们从左至右: `10` `12` `17` `25` 。根据我们的规则二叉搜索树,我们将增加`12`到右侧`10` `17` ,以这样的权利,以及`25`到这一权利。现在我们的树类似于一个链表,并且遍历它以找到`25`将要求我们以线性方式遍历所有项目。因此,在最坏的情况下,线性时间。这里的问题是树是不平衡的。我们将更多地了解这在以下挑战中意味着什么。说明:在此挑战中,我们将为树创建一个实用程序。编写一个方法`isPresent` ,它接受一个整数值作为输入,并在二叉搜索树中返回该值是否存在的布尔值。
# --hints--
存在`BinarySearchTree`数据结构。
```js
assert(
(function () {
var test = false;
if (typeof BinarySearchTree !== 'undefined') {
test = new BinarySearchTree();
}
return typeof test == 'object';
})()
);
```
二叉搜索树有一个名为`isPresent`的方法。
```js
assert(
(function () {
var test = false;
if (typeof BinarySearchTree !== 'undefined') {
test = new BinarySearchTree();
} else {
return false;
}
return typeof test.isPresent == 'function';
})()
);
```
`isPresent`方法正确检查添加到树中的元素是否存在。
```js
assert(
(function () {
var test = false;
if (typeof BinarySearchTree !== 'undefined') {
test = new BinarySearchTree();
} else {
return false;
}
if (typeof test.isPresent !== 'function') {
return false;
}
test.add(4);
test.add(7);
test.add(411);
test.add(452);
return (
test.isPresent(452) &&
test.isPresent(411) &&
test.isPresent(7) &&
!test.isPresent(100)
);
})()
);
```
`isPresent`处理树为空的情况。
```js
assert(
(function () {
var test = false;
if (typeof BinarySearchTree !== 'undefined') {
test = new BinarySearchTree();
} else {
return false;
}
if (typeof test.isPresent !== 'function') {
return false;
}
return test.isPresent(5) == false;
})()
);
```
# --solutions--