当前位置:首页 > JavaScript

js 实现二叉树

2026-03-01 07:55:57JavaScript

实现二叉树的基本结构

在 JavaScript 中,二叉树可以通过对象或类实现。每个节点包含 valueleft(左子树)和 right(右子树)属性。

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

二叉树的遍历方法

前序遍历(根 -> 左 -> 右)

递归实现:

js 实现二叉树

function preorderTraversal(node) {
  if (!node) return [];
  return [
    node.value,
    ...preorderTraversal(node.left),
    ...preorderTraversal(node.right),
  ];
}
console.log(preorderTraversal(root)); // [1, 2, 4, 5, 3]

中序遍历(左 -> 根 -> 右)

递归实现:

function inorderTraversal(node) {
  if (!node) return [];
  return [
    ...inorderTraversal(node.left),
    node.value,
    ...inorderTraversal(node.right),
  ];
}
console.log(inorderTraversal(root)); // [4, 2, 5, 1, 3]

后序遍历(左 -> 右 -> 根)

递归实现:

js 实现二叉树

function postorderTraversal(node) {
  if (!node) return [];
  return [
    ...postorderTraversal(node.left),
    ...postorderTraversal(node.right),
    node.value,
  ];
}
console.log(postorderTraversal(root)); // [4, 5, 2, 3, 1]

层序遍历(广度优先)

使用队列实现按层级遍历:

function levelOrderTraversal(root) {
  if (!root) return [];
  const queue = [root];
  const result = [];
  while (queue.length) {
    const node = queue.shift();
    result.push(node.value);
    if (node.left) queue.push(node.left);
    if (node.right) queue.push(node.right);
  }
  return result;
}
console.log(levelOrderTraversal(root)); // [1, 2, 3, 4, 5]

二叉树插入节点

根据特定规则(如二叉搜索树的有序性)插入新节点:

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

查找节点

在二叉搜索树中查找特定值:

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

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

相关文章

js实现分页

js实现分页

实现分页的基本思路 分页功能通常需要处理数据分割、页码生成和用户交互。核心逻辑包括计算总页数、根据当前页截取数据、渲染页码按钮等。 前端分页实现(静态数据) 假设已有全部数据,仅需前端分页展示:…

js实现复制

js实现复制

使用document.execCommand方法 在较旧的浏览器中,可以使用document.execCommand('copy')实现复制功能。创建一个临时的textarea或input元素,将需要…

js实现继承

js实现继承

原型链继承 通过将子类的原型指向父类的实例实现继承。子类实例可以访问父类原型上的属性和方法。 function Parent() { this.name = 'parent'; } Parent…

js轮播图实现原理

js轮播图实现原理

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

js实现目录

js实现目录

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

js实现图片滚动

js实现图片滚动

图片滚动的实现方法 使用CSS动画实现 通过CSS的animation和@keyframes可以实现简单的图片滚动效果。这种方法适合静态图片的无缝循环滚动。 <style> .scr…