当前位置:首页 > JavaScript

js实现二叉树

2026-04-03 19:38:51JavaScript

实现二叉树的基本结构

在JavaScript中,二叉树可以通过对象或类实现。每个节点包含值(value)、左子树(left)和右子树(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);

二叉树的遍历方法

二叉树的遍历分为深度优先(DFS)和广度优先(BFS)。以下是常见实现方式:

1. 深度优先遍历(DFS)

  • 前序遍历(根 → 左 → 右):
    function preorderTraversal(node) {
      if (!node) return [];
      return [node.value, ...preorderTraversal(node.left), ...preorderTraversal(node.right)];
    }
  • 中序遍历(左 → 根 → 右):
    function inorderTraversal(node) {
      if (!node) return [];
      return [...inorderTraversal(node.left), node.value, ...inorderTraversal(node.right)];
    }
  • 后序遍历(左 → 右 → 根):
    function postorderTraversal(node) {
      if (!node) return [];
      return [...postorderTraversal(node.left), ...postorderTraversal(node.right), node.value];
    }

2. 广度优先遍历(BFS)
使用队列实现层级遍历:

function breadthFirstTraversal(root) {
  const result = [];
  const queue = [root];
  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;
}

插入节点的方法

根据二叉搜索树(BST)规则(左子树值 < 根值 < 右子树值),插入逻辑如下:

class BinarySearchTree {
  constructor() {
    this.root = null;
  }

  insert(value) {
    const newNode = new TreeNode(value);
    if (!this.root) {
      this.root = newNode;
      return;
    }
    let current = this.root;
    while (true) {
      if (value < current.value) {
        if (!current.left) {
          current.left = newNode;
          break;
        }
        current = current.left;
      } else {
        if (!current.right) {
          current.right = newNode;
          break;
        }
        current = current.right;
      }
    }
  }
}

查找节点

在BST中查找特定值:

js实现二叉树

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

注意事项

  • 普通二叉树的插入和查找需依赖具体业务逻辑,而BST有明确的规则。
  • 遍历时注意递归的终止条件(if (!node) return),避免无限循环。
  • 广度优先遍历使用队列而非递归,适合处理层级数据。

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

相关文章

js实现跳转

js实现跳转

使用 window.location 跳转 通过修改 window.location.href 实现页面跳转,这是最常用的方法。 window.location.href = 'https://…

js实现复制到剪贴板

js实现复制到剪贴板

使用document.execCommand方法(传统方式,已废弃但部分浏览器仍支持) 该方法适用于旧版浏览器,但已被标记为废弃。执行前需确保文本已被选中: function copyToClipb…

js节流实现

js节流实现

节流的概念 节流(Throttle)是一种限制函数执行频率的技术,确保函数在一定时间间隔内只执行一次。常用于滚动事件、窗口调整等高频触发的场景。 基础实现方法 使用时间戳判断是否执行函数:…

js实现 功能

js实现 功能

在 JavaScript 中实现功能通常涉及多个关键步骤,具体取决于功能需求。以下是常见功能的实现方法和示例: 基本功能实现 使用函数封装逻辑是最直接的方式。例如,实现一个计算两数之和的函数: f…

js实现路由

js实现路由

js实现路由的方法 在JavaScript中实现路由功能可以通过多种方式完成,以下是几种常见的方法: 使用原生JavaScript实现路由 通过监听window.onhashchange事件来实现基…

js 实现滚动

js 实现滚动

实现滚动的方法 使用 window.scrollTo() window.scrollTo() 方法可以滚动到文档中的特定位置。可以指定 x 和 y 坐标,或者使用平滑滚动的选项。 // 滚动到指定位…