当前位置:首页 > 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);
}

中序遍历(左-根-右)

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);
  }
}

插入节点

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

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;
}

验证二叉搜索树

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

js 实现二叉树

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实现轮播图

轮播图实现方法 基础HTML结构 <div class="slider"> <div class="slides"> <img src="image1.jpg…

css3结合js制作

css3结合js制作

CSS3 结合 JavaScript 制作动态效果 CSS3 和 JavaScript 结合可以实现丰富的动态效果,包括动画、交互和响应式设计。以下是几种常见的实现方式: CSS3 动画与 Java…

js实现拖拽

js实现拖拽

实现拖拽的基本步骤 通过监听鼠标事件(mousedown、mousemove、mouseup)实现拖拽功能。以下是核心代码逻辑: const draggableElement = document.…

js实现祖玛

js实现祖玛

实现祖玛游戏的核心思路 祖玛游戏的核心玩法是发射彩色珠子,形成三个或以上相同颜色的珠子即可消除。以下是使用JavaScript实现的基本框架。 游戏初始化 创建画布并初始化游戏状态: const…

利用js实现

利用js实现

使用 JavaScript 实现 在 JavaScript 中,可以通过多种方式实现功能,具体取决于需求。以下是几种常见的方法: 方法一:使用原生 JavaScript // 示例代码…

js实现目录

js实现目录

实现目录的基本思路 在JavaScript中实现目录功能通常涉及以下几个核心步骤:解析文档中的标题元素(如h1-h6),动态生成目录结构,并添加交互逻辑(如点击跳转)。以下是具体实现方法: 解析标题…