<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>二叉树</title>
</head>
<body>
<script type="text/javascript">
const Compare = {
less: -1,
bigger: 1,
equ: 0,
};
class Node {
constructor(key) {
this.key = key;
this.left = null;
this.right = null;
}
}
class BST {
constructor() {
this.root = null;
}
insert(key) {
if (this.root == null) {
this.root = new Node(key);
} else {
this.insertNode(this.root, key);
}
}
compareFn(a, b) {
if (a === b) {
return Compare.equ;
}
return a < b ? Compare.less : Compare.bigger;
}
insertNode(node, key) {
if (this.compareFn(key, node.key) === Compare.less) {
if (node.left == null) {
node.left = new Node(key);
} else {
this.insertNode(node.left, key);
}
} else {
if (node.right == null) {
node.right = new Node(key);
} else {
this.insertNode(node.right, key);
}
}
}
inOrderMap(callback) {
this.inOrderMapNode(this.root, callback);
}
inOrderMapNode(node, callback) {
if (node != null) {
this.inOrderMapNode(node.left, callback);
callback(node.key);
this.inOrderMapNode(node.right, callback);
}
}
preOrderMap(callback) {
this.preOrderMapNode(this.root, callback);
}
preOrderMapNode(node, callback) {
if (node != null) {
callback(node.key);
this.preOrderMapNode(node.left, callback);
this.preOrderMapNode(node.right, callback);
}
}
postOrderMap(callback) {
this.postOrderMapNode(this.root, callback);
}
postOrderMapNode(node, callback) {
if (node != null) {
this.postOrderMapNode(node.left, callback);
this.postOrderMapNode(node.right, callback);
callback(node.key);
}
}
min() {
return this.minNode(this.root);
}
minNode(node) {
let current = node;
while (current != null && current.left != null) {
current = current.left;
}
return current;
}
max() {
return this.maxNode(this.root);
}
maxNode(node) {
let current = node;
while (current != null && current.right != null) {
current = current.right;
}
return current;
}
search(key) {
return this.searchNode(this.root, key);
}
searchNode(node, key) {
if (node === null) return false;
if (this.compareFn(key, node.key) === Compare.less) {
return this.searchNode(node.left, key);
} else if (this.compareFn(key, node.key) === Compare.bigger) {
return this.searchNode(node.right, key);
} else {
return true;
}
}
}
var mytree = new BST();
mytree.insert(100);
mytree.insert(80);
mytree.insert(70);
mytree.insert(90);
mytree.insert(110);
mytree.postOrderMap((value) => {
console.log("后序遍历", value);
});
mytree.min();
mytree.max();
</script>
</body>
</html>
乘风破浪,破浪破破破破破。。。
只是为了好学习
感觉大佬-->
。。。千峰教育。。。