javascript二叉树基本功能实现
JavaScript二叉树 实现 基本功能
2023-09-27 14:28:45 时间
preOrderTraverseNode(node.left, callback); //{2}
preOrderTraverseNode(node.right, callback); //{3}
this.postOrderTraverse = function(callback){
postOrderTraverseNode(root, callback);
var postOrderTraverseNode = function (node, callback) {
if (node !== null) {
postOrderTraverseNode(node.left, callback); //{1}
postOrderTraverseNode(node.right, callback); //{2}
callback(node.key); //{3}
this.min = function() {
return minNode(root);
var minNode = function(node) {
if (node) {
while (node node.left !== null) {
node = node.left;
return node.key;
return null;
this.max = function() {
return maxNode(root);
var maxNode = function (node) {
if (node){
while (node node.right !== null) { //{5}
node = node.right;
return node.key;
return null;
this.search = function(key) {
return searchNode(root, key);
var searchNode = function(node, key) {
if (node === null) {
return false;
if (key node.key) {
return searchNode(node.left, key);
} else if (key node.key) {
return searchNode(node.right, key);
}else{
return true;
this.remove = function(key) {
root = removeNode(root, key);
var removeNode = function(node, key){
if (node === null){ //{2}
return null;
if (key node.key){ //{3}
node.left = removeNode(node.left, key); //{4}
return node; //{5}
} else if (key node.key){ //{6}
node.right = removeNode(node.right, key); //{7}
return node; //{8}
} else { //键等于node.key
//第一种情况——一个叶节点
if (node.left === null node.right === null){ //{9}
node = null; //{10}
return node; //{11}
//第二种情况——一个只有一个子节点的节点
if (node.left === null){ //{12}
node = node.right; //{13}
return node; //{14}
} else if (node.right === null){ //{15}
node = node.left; //{16}
return node; //{17}
//第三种情况——一个有两个子节点的节点
var aux = findMinNode(node.right); //{18}
node.key = aux.key; //{19}
node.right = removeNode(node.right, aux.key); //{20}
return node; //{21}
function printNode(value) {
console.log(value);
var tree = new BinarySearchTree();
tree.insert(11);
tree.insert(7);
tree.insert(15);
tree.insert(5);
tree.insert(3);
tree.insert(9);
tree.insert(8);
tree.insert(10);
tree.insert(13);
tree.insert(12);
tree.insert(14);
tree.insert(20);
tree.insert(18);
tree.insert(25);
tree.insert(6);
tree.inOrderTraverse(printNode);
tree.preOrderTraverse(printNode);
tree.postOrderTraverse(printNode);
console.log(tree.min());
console.log(tree.max());
console.log(tree.search(1) ? Key 1 found. : Key 1 not found.);
console.log(tree.search(8) ? Key 8 found. : Key 8 not found.);
JS算法之二叉树、二叉搜索树 1. 知识点简讲 • 树在前端开发中的应用场景 • 二叉树深度优先遍历 递归和迭代的JS版本 2. 二叉树相关算法 3. 二叉搜索树(BST)相关算法
JS算法之二叉树、二叉搜索树 1. 知识点简讲 • 树在前端开发中的应用场景 • 二叉树深度优先遍历 递归和迭代的JS版本 2. 二叉树相关算法 3. 二叉搜索树(BST)相关算法
相关文章
- javascript - return
- 【学习笔记53】JavaScript正则表达式练习题
- JavaScript - 判断今天是星期几(周几 / 礼拜几),适用于 Vue.js uni-app Nuxt.js 等前端项目
- 全 Javascript 的 Web 开发架构:MEAN ---原文
- javascript子窗口父窗口相互操作 取值赋值的问题
- 《jQuery与JavaScript入门经典》——1.2 为编写jQuery和JavaScript做准备
- 2022 JavaScript 数组(Array)方法1w+字汇总(含数组新特性,全到没朋友,再也不用东拼西凑了)
- 用生活的栗子去理解JavaScript的Prmoise更通俗易懂
- javascript和php中的正则
- 轻松学习JavaScript十二:JavaScript基于面向对象之创建对象(一)
- JavaScript动态广告弹出框
- 深入理解JavaScript系列(30):设计模式之外观模式
- javascript继承之借用构造函数(二)
- javascript创建对象之寄生构造函数模式(六)
- javascript面向对象的程序设计之Object.getOwnPropertyDescriptor()
- CSS3&JavaScript 仿京东加入购物车特效
- JavaScript 函数的默认参数