作者我呢,在学这个之前,也是在学习了C语言的数据结构和算法的一些东西,然后我去看这个javascript,因为我感觉那个比较专业一点,好了,我们一起来看一下,什么是二叉树
介绍一下什么是树(tree),抽象一下,树是不是有很多节点,一棵树至少会有一个节点(根节点),
当然也可以是空树
- 树由节点组成,而节点的定义就是:一个数据、两个指针(如果有节点就指向节点、没有节点就指向null):
- 当然这里注意,树也有深度
- 叶子深度
- 子节点长度
二叉树中还有一种特殊的二叉树:二叉查找树(binary search tree)
- 定义:当前根节点的左边全部比根节点小,当前根节点的右边全部比根节点大。
- 明眼人可以看出,这对我们来找一个数是非常方便快捷的
如何用js代码写一个二叉查找树呢?
function Node(key) {
this.key = key;
this.left = null;
this.right = null;
}
function BinarySearchTree() {
this.root = null;
}
// 查询树排序插入
function insertNode(node, newNode) {
// 如果新节点值小于当前节点值,则插入左子节点
if (newNode.key < node.key) {
if (node.left === null) {
node.left = newNode;
} else {
insertNode(node.left, newNode);
}
} else {
// 如果新节点值大于当前节点值,则插入右子节点
if (node.right === null) {
node.right = newNode;
} else {
insertNode(node.right, newNode);
}
}
}
// 插入
BinarySearchTree.prototype.insert = function (key) {
let newNode = new Node(key);
if (this.root === null) {
this.root = newNode;
} else {
insertNode(this.root, newNode);
}
}
let tree = new BinarySearchTree()
tree.insert(19)
tree.insert(10)
tree.insert(20)
tree.insert(23)
tree.insert(1)
tree.insert(18)
console.log(tree)