知识点
- 二叉查找树,也称二叉搜索树、有序二叉树(英语:ordered binary tree)是指一棵空树
- 任意节点的左子树不空,则左子树上所有结点的值均小于它的根结点的值;
- 任意节点的右子树不空,则右子树上所有结点的值均大于它的根结点的值;
- 任意节点的左、右子树也分别为二叉查找树;
- 没有键值相等的节点;
- 二叉查找树相比于其他数据结构的优势在于查找、插入的时间复杂度较低。为O(log n)。
- 二叉查找树是基础性数据结构,用于构建更为抽象的数据结构,如集合、multiset、关联数组等。
实现代码
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>二叉查找树</title>
</head>
<body>
<script>
// 单个节点对象
class Node {
constructor (data, left, right) {
this.data = data;
this.left = left;
this.right = right;
}
}
// 树
class BinarySearchTree {
constructor () {
this.root = null;
}
// 插入成功返回树
insert (data) {
let cNode = new Node(data, null, null);
// 空树
if (!this.root) {
this.root = cNode;
return ;
}
// 非空树
let currentNode = this.root;
let parent = null;
// 遍历
while(1) {
// 得到一个指向 即将改变 或 其子节点将要被改变 的节点的 变量
parent = currentNode;
// 左子树
if (data < currentNode.data) {
// currentNode 指向为空,赋值到currentNode无效
/* currentNode = parent.left;
if (currentNode === null) {
currentNode = n;
break;
}*/
currentNode = currentNode.left;
if (currentNode === null) {
parent.left = cNode;
break
}