当前位置:首页 > JavaScript

js 实现二叉树

2026-04-04 08:32:30JavaScript

实现二叉树的基本结构

在JavaScript中,二叉树可以通过对象或类来实现。每个节点包含一个值和两个子节点(左子节点和右子节点)。

class TreeNode {
  constructor(value) {
    this.value = value;
    this.left = null;
    this.right = null;
  }
}

创建二叉树实例

通过实例化节点并连接子节点来构建二叉树。

const root = new TreeNode(1);
root.left = new TreeNode(2);
root.right = new TreeNode(3);
root.left.left = new TreeNode(4);
root.left.right = new TreeNode(5);

二叉树的遍历方法

二叉树的遍历分为前序、中序和后序三种方式。

前序遍历(根-左-右)

function preorderTraversal(node) {
  if (node === null) return;
  console.log(node.value);
  preorderTraversal(node.left);
  preorderTraversal(node.right);
}

中序遍历(左-根-右)

js 实现二叉树

function inorderTraversal(node) {
  if (node === null) return;
  inorderTraversal(node.left);
  console.log(node.value);
  inorderTraversal(node.right);
}

后序遍历(左-右-根)

function postorderTraversal(node) {
  if (node === null) return;
  postorderTraversal(node.left);
  postorderTraversal(node.right);
  console.log(node.value);
}

层序遍历(广度优先)

使用队列实现层序遍历,逐层访问节点。

function levelOrderTraversal(root) {
  if (root === null) return;
  const queue = [root];
  while (queue.length > 0) {
    const node = queue.shift();
    console.log(node.value);
    if (node.left !== null) queue.push(node.left);
    if (node.right !== null) queue.push(node.right);
  }
}

插入节点

根据二叉搜索树的特性插入节点(左子节点小于父节点,右子节点大于父节点)。

js 实现二叉树

function insertNode(root, value) {
  if (root === null) return new TreeNode(value);
  if (value < root.value) {
    root.left = insertNode(root.left, value);
  } else {
    root.right = insertNode(root.right, value);
  }
  return root;
}

查找节点

在二叉搜索树中查找特定值的节点。

function searchNode(root, value) {
  if (root === null || root.value === value) return root;
  if (value < root.value) return searchNode(root.left, value);
  return searchNode(root.right, value);
}

删除节点

删除二叉搜索树中的节点,需处理三种情况:无子节点、一个子节点、两个子节点。

function deleteNode(root, value) {
  if (root === null) return null;
  if (value < root.value) {
    root.left = deleteNode(root.left, value);
  } else if (value > root.value) {
    root.right = deleteNode(root.right, value);
  } else {
    if (root.left === null) return root.right;
    if (root.right === null) return root.left;
    const minNode = findMinNode(root.right);
    root.value = minNode.value;
    root.right = deleteNode(root.right, minNode.value);
  }
  return root;
}

function findMinNode(node) {
  while (node.left !== null) node = node.left;
  return node;
}

验证二叉搜索树

检查二叉树是否符合二叉搜索树的定义。

function isValidBST(root, min = null, max = null) {
  if (root === null) return true;
  if ((min !== null && root.value <= min) || (max !== null && root.value >= max)) return false;
  return isValidBST(root.left, min, root.value) && isValidBST(root.right, root.value, max);
}

标签: 二叉树js
分享给朋友:

相关文章

js实现全屏

js实现全屏

实现全屏的基本方法 使用JavaScript实现全屏功能主要依赖Element.requestFullscreen()方法。现代浏览器均支持此API,但不同浏览器可能需要添加前缀。 // 触发全屏…

js实现选项卡

js实现选项卡

实现选项卡的基本思路 选项卡通常由一组标签和对应的内容面板组成。点击标签时,显示对应的内容面板,隐藏其他面板。实现这一效果需要结合HTML结构、CSS样式和JavaScript交互逻辑。 HTML结…

js轮播图实现原理

js轮播图实现原理

轮播图的基本原理 轮播图通过动态切换显示的内容(图片、文本等)实现视觉上的滑动效果。核心原理是利用CSS和JavaScript控制元素的显示与隐藏,或通过变换位置实现滑动动画。 实现方法一:…

js 实现链表

js 实现链表

链表的基本概念 链表是一种线性数据结构,由一系列节点组成,每个节点包含数据和指向下一个节点的指针。与数组不同,链表在内存中是非连续存储的,插入和删除操作效率较高。 链表的实现 在 JavaScrip…

js实现驼峰

js实现驼峰

实现驼峰命名的几种方法 使用正则表达式和字符串替换 通过正则表达式匹配字符串中的特定模式(如下划线或短横线),并将其后的字母转换为大写,同时移除分隔符。 function toCamelCase(s…

js实现防洪

js实现防洪

防抖(Debounce)实现 防抖的核心思想是在事件触发后延迟执行回调函数,若在延迟时间内再次触发事件,则重新计时。适用于输入框搜索、窗口调整等场景。 function debounce(func,…